αα½ααααΈ! αα αααα»αα’αααααααααααα»αααΉααααα αΆαα’αααααΈααααααααα αα·αααααΎαααΆα dApp ααααααΆαα ααΎααααΆαα Waves α ααΌααααα‘ααααΎαα§αααααα αΆαααΆα α αα·ααΈααΆααααα αα·αα§ααΆα αααααααΆαα’αα·ααααααα
αααααααΆαααα’αα·αααααααααααΆαα dApps αα·ααααααα·ααΈααααααΆααΊααααΎαααααΌα
ααααΆα
- ααΆααααααααΌα
- ααΆααααααααΆαααααΎαααααααααααααααααα·
- ααΆαααΎαααααΎαααΆααααααα·ααΈ
- ααΆαααααΎααααα
α§ααααα
1. docker
ααΎααααΈααααΎαααΆα node αα·α Waves Explorer
ααααα·αααΎα’ααααα·αα ααα αΆααααααΎαααααΆαααα α’αααα’αΆα ααααααα αΆααααα αααΆαααΆαα·αααΆααααααΆαααΆααααααα·ααα·αααααα ααα»ααααβαααβααααΆαβααΆαβααΆααβαααααΆαβααααΆααβααααΆααβαααα½αβααααβα’αααβαα ααααΎαβααΆαβααΆαααααβα’αΆα βααΉαβα’αΌαβαααααΆαα
- α’αααααΉαααααΌαααΆαααααΈααααΈααΆαα·α αα ααΆαα½αααΉααααααΆαααααΆααααΆαααααα faucet αααααΆαααΆαααααααααα 10 WAVES αααααΆαα 10 ααΆααΈααααα
- αααααααΆαααα»αααΆααααααα αααα»ααααααΆαααΆαααααααΊ 1 ααΆααΈαααα»αααααΆαα - 15 αα·ααΆααΈα αααααΊααΆααΆαααααααααΆααααΆαα·ααααα ααααααααααα·ααααα·ααΆαααΆαααΆαααΆααααααΆααα αααΎαα
- ααααΆαααααααΆααααααΆαααΆαααΊα’αΆα ααααΎαα ααΆααα ααΎααααΆααααΆαααααααΆααΆαααα
- αα½αααααα’αΆα αα·αα’αΆα ααααΎααΆαααΆααααααα’αΆαααα αααααΆαααΆαααααΆαα
α αΆααααΈααααααααα αααα»αααΉαααααααααΆα’ααααααα»αααααΎααΆαααΆαα½αααααΆααααααΆαααααα½αααααα’αααα
2. α§ααααααααααΆααααΆααααααααΆ Surfboard
- ααΆααα αα·αααα‘αΎα Node.js αααααααΎ ppa, homebrew α¬ exe αα
ααΈαααα
https://nodejs.org/en/download/ . - ααα‘αΎα Surfboard αααααΆα§ααααααααα’αα»ααααΆαα±ααα’αααααααΎαααΆαααΆαααααΎααααααα ααΎααααΆαααααααΆαααααΆααα
npm install -g @waves/surfboard
3. αααααα·ααΈαααα½α Visual Studio Code
ααα αΆααααααΊααααα
α
α·ααα ααααα·αααΎα’ααααα·ααααααΆα’αααααΆαααα IDEs α αΎαα
αΌαα
α·αααα’αααααα’αααααα α§αααααα
αΆαααΆα
αααΆααα’ααααΊααΆα§αααααααααΎααααΆαααααααΆααααΆααααααααΆα ααααα·αααΎα’αααααααΎ vim ααΌαααα
α·ααααα»αααΆααααΎαααααα·ααΈαααα½α
ααΆααα αα·αααα‘αΎα Visual Studio Codeα
ααΎα VS Code α αΎαααα‘αΎααααααα·ααΈαααα½α waves-rideα
ααααααααααααααααα·ααΈαα»ααα Waves Keeperα
ααααΎ!
α αΆααααααΎαααααΆαααα·α Waves Explorer
1. α αΆααααααΎαααααΆααα
docker run -d -p 6869:6869 wavesplatform/waves-private-node
ααααΌαααααΆααααΆααααΆααααααΌαααΆαααΎαααααΎαααΆαααΆαααα REST API αα
αααα»α
Swagger REST API αααααΆααααααΆαα
2. α αΆααααααΎαα§ααΆα ααααα Waves Explorerα
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
ααΎααααααα·ααΈαα»αααα αΎαα
αΌααα
ααΆαα
Waves Explorer αααα αΆαα§ααΆα αααααααΆααααΌαααααΆα
αα ααΆαααααααα RIDE αα·αα§ααααα Surfboard
αααααΎααααααα αΎαααααΎαααΆαααΆααααααααΆαα αααα»αααΆα
surfboard init
ααΆααααααααΆα αΆααααααΎαααααΆαα½ααα ααΆαααααααααααααα αααααα·ααΈ αα·αααΆαααααΎααααα "ααααΆααα½ααα·ααααα" α ααααα·αααΎα’αααααΎα Folder ααααααααααΎ VS Code α’αααααΉαααΎαα
Surfboard.config.json
- αα ααααααα ./ride/ α’αααααΉαααΎαα―αααΆααααα½α wallet.ride - ααααααααααΌα dApp αααα·ααα α ααΎαααΉααα·ααΆαααααααααα dApps αα αααα»ααααα»ααααααΆααα
- αα ααααααα ./test/ α’αααααΉαααΎαα―αααΆα *.js α ααΆαααααΎαααααααααΌαααΆααααααΆαα»ααα ααΈαααα
- ./surfboard.config.json β α―αααΆαααααααα ααΆαααααααααααααΆααααααΎαααΆαααΆαααααα
Envs ααΊααΆαααααααααΆαααα½αα ααα·ααααΆαααΈαα½ααααααΌαααΆαααααααα ααΆααααααααααΌα αααα
- α ααα»α αααα αα REST API ααααααΆαααααααΉαααααΌαααΆαααααΎααΎααααΈααΎαααααΎαααΆα dApp αα·α CHAIN_ID αααααααΆαα
- ααααΆαααααΆαααααααΆααααααΈαααααΆααααααΆαααααΆαααααααΉαααΆααααααααααααΆαααααΆααααΆαααααααααα’αααα
ααΌα αααα’αααα’αΆα ααΎα surfboard.config.json ααΆααααααα·ααααΆαα αααΎαααΆαααααΆαααΎαα ααααΆαααΎαβααΊβααΆβααα·ααααΆαβααΌαααααΆα (αα defaultEnv ααΊααΆβαααΆαααΆααααααβαααβα’αΆα βααααΆααααααΌαβααΆα)α
αααααα·ααΈ Wallet-demo
αααααααααα·ααααααΆα―αααΆαααααα ααΆααΆ RIDE ααα αααα»ααα αα·α ααΌααααα‘ααααΎααααααα·ααΈαααααΎαααΆαααααααΆα αα·αααΆααααα ααΎααααΈαααααΆααααα αααΆααα’αααΈα’αααΈααααααα»αααΎαα‘αΎααα αααα»α blockchain α
ααΌααααα‘ααααΎααααααα·ααΈ Wallet-demo ααααΆαααααα½αα ααααΆααααΆααα’αΆα ααααΎαααααΆαααααΆαααα ααΆααα’αΆααααααΆα dApp α α’αααα’αΆα αα WAVES ααααα’αααααααα»αααααα αα»αααΆα @Callable ααΈαααΆαααΆαααα InvokeScriptTransactionα
deposit()
αααααΆαααΆαααΆαααΌααΆααααααΆααααΆαα½α WAVESwithdraw(amount: Int)
ααααααα‘αααααααΆαααααΆαα
ααααα½αααααααΈαα·ααααα dApp αα ααΆαααααααα (α’αΆααααααΆα β α ααα½α) ααΉαααααΌαααΆααααααΆαα»αα
αααααααΆα
ααααΆαααΆααααααα
ααααΌα
ααα
Alice ααΆααααααΆαα 5 WAVES
α’αΆαααααααΆα alice β 500000000
Bob ααΆααααααΆαα 2 WAVES
α’αΆαααααααΆα alice β 500000000
bob-α’αΆααααααΆα β 200000000
ααα Bob αα 7 WAVES
ααα·ααα!
α’αΆααΈααα 4 WAVES
α’αΆαααααααΆα alice β 100000000
bob-α’αΆααααααΆα β 200000000
αααααΆααΌαααΎααααΈαααα αααΆααααΈααααΆαααΆαα
# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
let pmt = extract(i.payment)
if (isDefined(pmt.assetId))
then throw("works with waves only")
else {
let currentKey = toBase58String(i.caller.bytes)
let currentAmount = match getInteger(this, currentKey) {
case a:Int => a
case _ => 0
}
let newAmount = currentAmount + pmt.amount
WriteSet([DataEntry(currentKey, newAmount)])
}
}
@Callable(i)
func withdraw(amount: Int) = {
let currentKey = toBase58String(i.caller.bytes)
let currentAmount = match getInteger(this, currentKey) {
case a:Int => a
case _ => 0
}
let newAmount = currentAmount - amount
if (amount < 0)
then throw("Can't withdraw negative amount")
else if (newAmount < 0)
then throw("Not enough balance")
else ScriptResult(
WriteSet([DataEntry(currentKey, newAmount)]),
TransferSet([ScriptTransfer(i.caller, amount, unit)])
)
}
@Verifier(tx)
func verify() = false
ααΌαααααΌααα’αΆα
ααααΌαααΆαααααΎααα
αααααα·ααΈαααα½α VSCode ααΆααααααΆαα αααααααΆαααααααααααααααααααα½αα―αααΆαα ααΌα αααα α’ααααααααα’αΆα αααα½ααα·αα·αααααα α»ααα αααα»αααααΆαααααα αΆα
ααααα·αααΎα’αααα
ααααααΎαααααα·ααΈαα·ααααα’αααααααααααα
αααα
αααααα―αααΆα ααΌαααααΎ
surfboard compile ride/wallet.ride
ααΆααΉαα ααααΆαααααΈααααΌα RIDE αααααΆαα ααααα base64 α
ααααααΈαααΆααααααααααΆαα 'wallet.ride'
αααααΎα
- "αα»αααα" αααααααΌααα·αα·αααααααΈα αααΎαααΆαααα MassTransferTransaction α αααααααααααΈαα αΎαααΆαααααααΆαααΆαα blockchain α
- βα’αΆα ααΆααααααΆααβ ααααΎ InvokeScriptTransaction αα ααΆαααααααΆα αααααααΎα±αααα»αααΆαααΆααααααΆαα () ααααααααααΆααααααΈααΈαα½ααααααααΈααΆααααΈαα
- ααΆαααααΎααααα "αα·αα’αΆα ααααααΆααααΎαααΈααΆαααΆααααααΆαα" αααααααΆαααααΆααααΆααα’αΆα αα½α αααααΆαααααΆααααααα’ααααααααΆαααα
- "α’αΆα ααΆααααααΆαα" αα·αα·αααααΎαααΆααΆαααααααΆααααααΌαααΆαααααΎαααΆααααΆαααααΉαααααΌαα
ααααΎαααΆαααΆαααααΎαααααααΈ Surfboard αα·ααα·ααΆααααααααα αααα»α Waves Explorer
ααΎααααΈααααΎαααΆαααααα ααΌαααα
surfboard test
ααααα·αααΎα’αααααΆαααααααΈαα αααΎα (α§ααΆα ααα α’αααααααΌαααΆαααααααΈαααΆαααααααΆαααΆα ααααα‘αα) α’αααα’αΆα ααααΎαααΆαααΆαα
surfboard test my-scenario.js
Surfboard ααΉααααααΌαα―αααΆαααΆααααααα αααα»ααα ./test/ α αΎαααααΎαααΆαααααααΈααα ααΎααααΆαααααααααΌαααΆαααα‘αΎααα αααα»α surfboard.config.json α αααααΆααααΈααΈαααΈαα·ααΆααΈ α’αααααΉαααΎαα’αααΈαα½αααΌα αααα
wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
β Can deposit (4385ms)
β Cannot withdraw more than was deposited
β Can withdraw (108ms)
3 passing (15s)
α ααΊα! ααΆαααααΎαααααααΆαααααααΆααα α₯α‘αΌαααα ααΌααααα‘ααααΎαααΆααΎααΆαα’αααΈααΎαα‘αΎααα
αααααααΎ Waves Explorerα ααΎααααα»α α¬αα·αααααΆααα’αΆααααααΆαααΆαααΎαα½ααααα»αααΆαααααααα (α§ααΆα ααα αααααααΌαααααΆ wallet#
. αα
ααΈαααα’αααα’αΆα
ααααααααααααααα·ααααα·ααααα·ααΆα ααααΆαααΆα dApp α―αααΆααααααΈααααααΆααααααα
ααα Explorer α αααααα·ααΈβαααβααΎαβααβααααΌαβααΆαβααΆααβα±ααβααααΎα
αααααΉαααααααααααΆαα Surfboardα
1. ααΎααααΈααΆααααααα αααα»αααα·ααΆααΆα testnet ααΌαααααΎα
surfboard test --env=testnet
2. ααααα·αααΎα’αααα ααααΎααααα JSON ααααααα·ααααα·ααΆα αα·αααααααααα½αααααααΌαααΆαααααΎαααΆααααααααΆαα ααΌαααααΎαααΆαααΆαααΆαααααααΆαα½α -v (ααΆααααααΆ 'verbose'):
surfboard test -v
ααΆαααααΎααααΆαααααααα·ααΈααΆαα½α Waves Keeper
1. ααα‘αΎα Waves Keeper ααΎααααΈααααΎααΆαα
ααΆαααα‘αΎα Waves Keeper ααΎααααΈααααΎααΆαααΆαα½αααααΆααααΌαααααΆα
2. ααΆαα
αΌαααααΆαααααΆααααΆαα½ααααααΆαααααΆαααααααΆαααααααΆα? αααααΆααααΆαααΆαααα ααααΎααααΆααααΌαααααΌαααααααΆααααααα’αααα waves private node seed with waves tokens
. α’αΆαααααααΆαα 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF
.
3. α’αααα’αΆα
ααααΎαααΆααααααα·ααΈ serverless single page ααααααα½αα―ααααααααΎ npmα α¬α
αΌααα
ααΆαααααααααααααΆαααααΆααα
4. αααα αΌαα’αΆααααααΆαααΆααΌαααΈααααΎαααΆαααΆααααα (ααΌααααααΆααααΈααΆαααΎ) αα αααα»ααααα’ααα’αααααα’αΆααααααΆα dApp
5. αααα αΌαα ααα½ααα·α αα½α αα αααα»αααΆα "ααΆααααααΆαα" α αΎαα α»α αααΌαα»α:
Waves Keeper ααααΎαα»αααΆαα’αα»ααααΆαααΎααααΈα
α»αα αααααααΆααΎ InvokeScriptTransaction ααΆαα½αααΉαααΆαααΌααΆαα 10 WAVES α
6. αααααΆααααααα·ααααα·ααΆαα
ααααα·ααααα·ααΆαααααΌαααΆααααααΎα αα·αααααΆααα
ααΆαααααααΆαα α₯α‘αΌααααα’αααα’αΆα
ααΎαααααααααΆααααααααΆα
7. αααα½ααα·αα·αααααααα·ααααα·ααΆααααααααΎ Waves Explorer α αααα αΌαααααααααΆαααααα»αααΆαααααααα
ααα ααααΈααααα·ααααΆα αα·αααααααΆααααααα
ααΎαααΆααα·αα·αααααΎαα§ααααααααααΆαααααααΎα ααΆααααα ααΆαααΆαααααααΆα αα·αααααΎααααΆαα dApps ααΆαααααα ααΎαααα·ααΆ Wavesα
- ααΆααΆαα·α
- VS αααααα·ααΈαα·ααααααΌα
- ααα Explorer
- αα·ααααααααααΆα
- α’ααααααααΆααα
αααααααΆαααααααΆααα’ααααααα ααααααααα RIDEα
ααααα αΌααα αααα»ααααααΆααα RIDE α αΎααααααΎα dApp ααααΌαααααα’ααα!
TL; αα»α:
ααααα: www.habr.com