แแแแแ แฏแแแ! แแ แกแขแแขแแแจแ แแ แแแฉแแแแแแ, แแฃ แ แแแแ แฃแแแ แแแฌแแ แแ แแ แแแฃแจแแแ แฉแแแฃแแแแ แแแ dApp Waves แแแแแซแแ. แแแแแ แจแแแฎแแแแ แกแแญแแ แ แแแกแขแ แฃแแแแขแแแก, แแแแแแแแก แแ แแแแแแแแ แแแแก แแแแแแแแก.
dApps แแ แ แแแฃแแแ แฃแแ แแแแแแแชแแแแแก แแแแแแแแ แแแแก แกแฅแแแ แแแแฅแแแก แแแแแแ:
- แแแแแก แแแฌแแ แ
- แแแขแแแแขแฃแ แ แขแแกแขแแ แแแแก แฌแแ แ
- แแแแแแแชแแแก แแแจแแแแ
- แขแแกแขแแ แแแ
แแแกแขแ แฃแแแแขแแแ
1. docker
แแแแแซแแกแ แแ Waves Explorer-แแก แแแกแแจแแแแแ
แแฃ แแ แแกแฃแ แ แแแแแซแแก แแแฌแงแแแ, แจแแแแซแแแแ แแแแแขแแแแ แแก แแแแแฏแ. แงแแแแแแแ แแแแก แจแแแแแ, แแ แกแแแแแก แกแแขแแกแขแ แแ แแฅแกแแแ แแแแแขแฃแแ แฅแกแแแ. แแแแ แแ แแฅแแแแ แกแแแฃแแแ แ แแแแแซแแก แแแแแแแแแแก แแแ แแจแ, แขแแกแขแแ แแแแก แแ แแชแแกแ แจแแแซแแแแ แแแญแแแแฃแ แแแก.
- แแฃแแแแแแ แแแแญแแ แแแแแ แแฎแแแ แแแแแ แแจแแแ แกแแขแแกแขแ แแแจแแแแแ. แกแแขแแกแขแ แฅแกแแแแก แแแแแแ แแแแแกแชแแแก 10 แขแแแฆแแก แงแแแแ 10 แฌแฃแแจแ.
- แกแแขแแกแขแ แฅแกแแแจแ แแแแแแแแแก แกแแจแฃแแแ แแ แ 1 แฌแฃแแแ, แแแแแซแจแ โ 15 แฌแแแ. แแก แแแแกแแแฃแแ แแแแ แจแแกแแแฉแแแแแ, แ แแแแกแแช แขแ แแแแแฅแชแแ แแแแแฎแแแก แแ แแแแแฏแแ แแ แแแแแกแขแฃแ แแแแก.
- แกแแฏแแ แ แกแแขแแกแขแ แแแแแซแแแแ แจแแกแแซแแแแแแแ แแแ แแกแแฃแแ แฅแแจแแ แแแ.
- แแกแแแ แแกแแแ แจแแแซแแแแ แแ แแแแแ แแแฃแฌแแแแแแแ แแงแแก แขแแฅแแแแฃแ แ แแแแกแแฎแฃแ แแแแก แแแแ.
แแแแแ แแแแ แแแแแ แแฃแแแ, แ แแ แแฅแแแ แแฃแจแแแแ แกแแแฃแแแ แแแแแซแแแ.
2. Surfboard Command Line Tool
- แฉแแแแขแแแ แแแ แแ แแแแแแกแขแแแแ แแ Node.js ppa, homebrew แแ exe แแแแแงแแแแแแ แแฅ:
https://nodejs.org/en/download/ . - แแแแแแกแขแแแแ แแ Surfboard, แแแกแขแ แฃแแแแขแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแฎแแ แชแแแแแ แขแแกแขแแแ แแ แกแแแฃแ แแแแแซแแ.
npm install -g @waves/surfboard
3. Visual Studio Code แแแแฃแแ
แแก แแแแแฏแ แแ แฉแแแแแแ, แแฃ แแ แฎแแ แ IDE-แแแแก แแฃแแจแแแแขแแแแแ แ แแ แฃแแแ แแขแแกแแแแก แแแแญแแแ แขแแฅแกแขแฃแ แ แแแแฅแขแแ แแแก. แงแแแแ แกแแญแแ แ แแแกแขแ แฃแแแแขแ แแ แแก แแ แซแแแแแแก แฎแแแแก แแแแฃแแแแฃแ แ แแ แแแ แแแ. แแฃ แแงแแแแแ 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
แแ แซแแแแแ แแฎแแแแก แแแ แแฅแขแแ แแแก แแแแชแแแแแแแชแแแก แแ แแแฅแขแแก แกแขแ แฃแฅแขแฃแ แแ, "hello world" แแแแแแแชแแแแแแ แแ แขแแกแขแแแแ. แแฃ แแ แกแแฅแแฆแแแแแก แแแฎแกแแแ 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 แแแกแแฆแแแ แแ แแก แชแแแแแแแแ แแแ แแแแขแ แ).
แกแแคแฃแแ-แแแแ แแแแแแแชแแ
แแก แแแแงแแคแแแแแ แแ แแ แแก แแแแแแแแ RIDE แแแแแ. แแแ แแฅแแ, แแแแแฎแแแแ แแแแแแแชแแแก, แ แแแแแกแแช แฉแแแ แแแงแแแแแ แแ แแแแแฌแแแแ, แ แแ แฃแแแ แแแแแแแ แ แ แฎแแแแ แแแแแฉแแแแจแ.
แแแแแ แจแแแฎแแแแ แฃแแ แแแ Wallet-แแแแ แแแแแแแชแแแก. แแแแแกแแแแ แก แจแแฃแซแแแ แขแแแแแแแแก แแแแแแแแ dApp แแแกแแแแ แแแ. แแฅแแแ แจแแแแซแแแแ แแฎแแแแ แแฅแแแแ แขแแแฆแแแแก แแแแฆแแแ. แแ แ @Callable แคแฃแแฅแชแแ แฎแแแแแกแแฌแแแแแแ InvokeScriptTransaction-แแก แกแแจแฃแแแแแแ:
deposit()
แ แแแแแแช แกแแญแแ แแแแก แแแแแแ แแฃแ แแแแแฎแแแก WAVES-แจแwithdraw(amount: Int)
แ แแแแแแช แแแ แฃแแแแก แแแขแแแแแก
dApp แกแแกแแชแแชแฎแแ แชแแแแแก แแแแแแแแแแแจแ, แกแขแ แฃแฅแขแฃแ แ (แแแกแแแแ แแ โ แแแแฎแ) แจแแแแ แฉแฃแแแแแ:
แแฅแชแแ
แจแแแแแแ แแแฆแแแฃแแ แแแแแแแ แแแแ
แกแแฌแงแแกแ
แชแแ แแแแ
แแแแกแแก แแแแแแแขแแแ 5 แขแแแฆแ
แแแแกแ-แแแกแแแแ แแ โ 500000000
แแแ แแแแแแแขแแแ 2 แขแแแฆแ
แแแแกแ-แแแกแแแแ แแ โ 500000000
แแแ-แแแกแแแแ แแ โ 200000000
แแแ แแแแแฆแแแก 7 แขแแแฆแแก
แฒฃแฒแฒ แฒงแฒแฒคแฒแฒแฒ!
แแแแกแ แแแแแฆแแแก 4 แขแแแฆแแก
แแแแกแ-แแแกแแแแ แแ โ 100000000
แแแ-แแแกแแแแ แแ โ 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 แแแแฃแแ แแฎแแ แก แฃแญแแ แก แฃแฌแงแแแข แแแแแแแแชแแแก แคแแแแแก แ แแแแฅแขแแ แแแแกแแก. แแแแขแแ, แงแแแแแแแแก แจแแแแซแแแแ แแแแแขแ แแแแ แจแแชแแแแแแ แฉแแแแ แแจแ PROBLEM.
แแฃ แแกแฃแ แ แแแแแแงแแแแ แกแฎแแ แขแแฅแกแขแฃแ แ แ แแแแฅแขแแ แ แคแแแแแก แจแแแแแแแกแแก, แแแแแแงแแแแ
surfboard compile ride/wallet.ride
แแก แแแแแแขแแแก base64 แจแแแแแแแแ RIDE แแแแแก แกแแ แแแก.
แกแแขแแกแขแ แกแแ แแแขแ 'wallet.ride'-แแกแแแแก
แแแแแ แจแแแฎแแแแ
- โBeforeโ แแคแแแแแกแแแก แแ แแแแ แแแแแ แแจแก MassTransferTransaction-แแก แกแแจแฃแแแแแแ, แแแแแแก แกแแ แแแขแก แแ แแแ แชแแแแแก แแแก แแแแแฉแแแแจแ.
- โแจแแแซแแแแ แฉแแ แแชแฎแแโ แแแแแแแแก 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 แกแขแแขแฃแกแ, แแแแแแแแแแ แแแฃแแ แแแแแ แฃแแ แคแแแแ.
Waves Explorer. แแแแแแแชแแ, แ แแแแแแช แแฎแแแฎแแ แแแแแแแแ.
แกแแ แคแแแแแก แแแคแแก แ แแแแแแแแ แ แฉแแแ:
1. แขแแกแขแแก แฅแกแแแแก แแแ แแแแจแ แจแแกแแแแฌแแแแแแ แแแแแแงแแแแ:
surfboard test --env=testnet
2. แแฃ แแกแฃแ แ แแฎแแแแ แขแ แแแแแฅแชแแแแแก JSON แแแ แกแแแแ แแ แ แแแแ แแฃแจแแแแแแ แแกแแแ แแแแแซแแก แแแแ , แฉแแแขแแ แแ แขแแกแขแ -v-แแ (แแแฃแแแกแฎแแแแ โแกแแขแงแแแแ แโ):
surfboard test -v
แแแแแแแชแแแแแก แแแแแงแแแแแ Waves Keeper-แแ
1. แแแแงแแแแ Waves Keeper แกแแแฃแจแแแ:
Waves Keeper-แแก แแแงแแแแแ แแแแแแแแ แแ แแแแแซแแแ แแฃแจแแแแแกแแแแก
2. แแแแแ แขแแ แแแฃแแ แกแแแแฃแแแ แคแ แแแ แขแแแแแแแแ แฅแกแแแแกแแแแก? แกแแแแ แขแแแแกแแแแก แแแแแแงแแแแ แแฅแแแแ แแแแแซแแก แกแแฌแงแแกแ แแแกแแ: waves private node seed with waves tokens
. แแแกแแแแ แแ: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF
.
3. แแฅแแแ แจแแแแซแแแแ แแแฃแจแแแ แกแแ แแแ แแก แแแ แแจแ แแ แแ แแแแ แแแแแ แแแแแแแชแแ npm-แแก แแแแแงแแแแแแ. แแ แแแแแแแ แแ แกแแแฃแแแ:
4. แจแแแงแแแแแ แกแแคแฃแแแก แแแกแแแแ แแ แกแแขแแกแขแ แแแจแแแแแแแ (แแแแแ แฎแแแแแกแแฃแแ) dApp แแแกแแแแ แแแก แขแแฅแกแขแฃแ แแแแจแ
5. โแแแแแแแขแแกโ แแแแจแ แจแแแงแแแแแ แแชแแ แ แแแแฎแ แแ แแแแญแแ แแ แฆแแแแแก:
Waves Keeper แแแฎแแแก แแแแแ แแแแก แฎแแแ แแแแฌแแ แแก InvokeScriptTransaction-แก 10 WAVES แแแแแฎแแแ.
6. แแแแแแกแขแฃแ แแ แแแ แแแแแ:
แขแ แแแแแฅแชแแ แแฅแแแแแ แแ แแแแแแชแแแ แฅแกแแแจแ. แแฎแแ แแฅแแแ แจแแแแซแแแแ แแแฎแแ แแแกแ แแแ แแแแแแก แแแฌแแแแ
7. แขแ แแแแแฅแชแแแก แแแแแขแแ แแแแ Waves Explorer-แแก แแแแแงแแแแแแ. แจแแแงแแแแแ ID แกแแซแแแแ แแแแจแ
แแแกแแแแแแ แแ แแแแแขแแแแแ แแแคแแ แแแชแแ
แฉแแแ แแแแแแฎแแแแ แแแกแขแ แฃแแแแขแแแก Waves แแแแขแคแแ แแแแ แแแ แขแแแ dApps-แแก แจแแแฃแจแแแแแแก, แขแแกแขแแ แแแแก, แแแแแแแแแแกแ แแ แแแแแงแแแแแแกแแแแก:
- RIDE แแแ
- VS แแแแแแแก แ แแแแฅแขแแ แ
- Waves Explorer
- Surfboard
- แขแแแฆแแแแก แแแแแ แ
แแแแแแแ แแแแแแแก, แแแกแแช แกแฃแ แก แแแแแ แซแแแแก RIDE-แก แกแฌแแแแ:
แแแแแแ แซแแ แฉแแซแแ แแ RIDE แแแแแจแ แแ แจแแฅแแแแแ แแฅแแแแ แแแ แแแแ dApp!
TL; DR:
แฌแงแแ แ: www.habr.com