tx · 6fFfNr4D1A7bVxkoPrTdKzPMpKS8iLeY7ZW6z9XzLEsn 3N3st6Cp9ZLz8kmT33EY41AVjwKqBVebvyq: -0.01000000 Waves 2019.06.25 17:33 [557755] smart account 3N3st6Cp9ZLz8kmT33EY41AVjwKqBVebvyq > SELF 0.00000000 Waves
{ "type": 13, "id": "6fFfNr4D1A7bVxkoPrTdKzPMpKS8iLeY7ZW6z9XzLEsn", "fee": 1000000, "feeAssetId": null, "timestamp": 1561473228620, "version": 1, "sender": "3N3st6Cp9ZLz8kmT33EY41AVjwKqBVebvyq", "senderPublicKey": "59sF1tAi6uys443tyFtYoknqpQh12L9GAovriikqJ72a", "proofs": [ "QR6tZqB494vLRKPk69gPdUhFiCyCTghi1Eo5RuDosrEZUYqU4Q37SKHefaPkFfDn2YzybitYWgUNm1iJA9C7a3L" ], "script": "base64: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", "chainId": 84, "height": 557755, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let defaultAmount = 0 | |
5 | + | ||
6 | + | let maxAmount = 500000000 | |
7 | + | ||
8 | + | @Callable(invoke) | |
9 | + | func init (publicKey,channel) = { | |
10 | + | let publicKeyHash = toBase58String(blake2b256(publicKey)) | |
11 | + | let channelId = toBase58String(blake2b256(toBytes(channel))) | |
12 | + | let currentKey = ("current_" + channelId) | |
13 | + | let currentAmountKey = ("current_amount_" + channelId) | |
14 | + | let isPublicChannel = (6 > size(channel)) | |
15 | + | let pmtAmount = match invoke.payment { | |
16 | + | case pmt: AttachedPayment => | |
17 | + | if (isDefined(pmt.assetId)) | |
18 | + | then 0 | |
19 | + | else pmt.amount | |
20 | + | case _ => | |
21 | + | 0 | |
22 | + | } | |
23 | + | let requiredAmount = match getInteger(this, currentAmountKey) { | |
24 | + | case currentAmount: Int => | |
25 | + | currentAmount | |
26 | + | case _ => | |
27 | + | 0 | |
28 | + | } | |
29 | + | let newRequiredAmount = if (if (isPublicChannel) | |
30 | + | then (pmtAmount >= maxAmount) | |
31 | + | else false) | |
32 | + | then maxAmount | |
33 | + | else pmtAmount | |
34 | + | if ((requiredAmount > pmtAmount)) | |
35 | + | then throw((("Init requires " + toString((requiredAmount / 100000000))) + " waves")) | |
36 | + | else match getBinary(this, (publicKeyHash + "_owner")) { | |
37 | + | case b: ByteVector => | |
38 | + | if ((b != invoke.caller.bytes)) | |
39 | + | then throw("Public key is not yours") | |
40 | + | else match getBinary(this, currentKey) { | |
41 | + | case left: ByteVector => | |
42 | + | let leftHash = toBase58String(blake2b256(left)) | |
43 | + | WriteSet([DataEntry((publicKeyHash + "_owner"), invoke.caller.bytes), DataEntry(leftHash, publicKey), DataEntry(publicKeyHash, left), DataEntry(currentKey, 0), DataEntry(currentAmountKey, defaultAmount)]) | |
44 | + | case _ => | |
45 | + | WriteSet([DataEntry((publicKeyHash + "_owner"), invoke.caller.bytes), DataEntry(currentKey, publicKey), DataEntry(currentAmountKey, newRequiredAmount)]) | |
46 | + | } | |
47 | + | case _ => | |
48 | + | match getBinary(this, currentKey) { | |
49 | + | case left: ByteVector => | |
50 | + | let leftHash = toBase58String(blake2b256(left)) | |
51 | + | WriteSet([DataEntry((publicKeyHash + "_owner"), invoke.caller.bytes), DataEntry(leftHash, publicKey), DataEntry(publicKeyHash, left), DataEntry(currentKey, 0), DataEntry(currentAmountKey, defaultAmount)]) | |
52 | + | case _ => | |
53 | + | WriteSet([DataEntry((publicKeyHash + "_owner"), invoke.caller.bytes), DataEntry(currentKey, publicKey), DataEntry(currentAmountKey, newRequiredAmount)]) | |
54 | + | } | |
55 | + | } | |
56 | + | } | |
57 | + | ||
58 | + | ||
59 | + | ||
60 | + | @Callable(invoke) | |
61 | + | func sendMessage (publicKey,message) = { | |
62 | + | let publicKeyHash = toBase58String(blake2b256(publicKey)) | |
63 | + | match getBinary(this, (publicKeyHash + "_owner")) { | |
64 | + | case assignedCaller: ByteVector => | |
65 | + | if ((assignedCaller != invoke.caller.bytes)) | |
66 | + | then throw("Public keys not match") | |
67 | + | else match getBinary(this, publicKeyHash) { | |
68 | + | case right: ByteVector => | |
69 | + | let conversationId = toBase58String(blake2b256((publicKey + right))) | |
70 | + | let nonceKey = (conversationId + "_n") | |
71 | + | let nonce = match getInteger(this, nonceKey) { | |
72 | + | case i: Int => | |
73 | + | (i + 1) | |
74 | + | case _ => | |
75 | + | 1 | |
76 | + | } | |
77 | + | WriteSet([DataEntry(((conversationId + "_") + toString(nonce)), message), DataEntry(nonceKey, nonce)]) | |
78 | + | case _ => | |
79 | + | throw("Not initialized") | |
80 | + | } | |
81 | + | case _ => | |
82 | + | throw("Owner not defined") | |
83 | + | } | |
84 | + | } | |
85 | + | ||
86 | + |
github/deemru/w8io/169f3d6 22.39 ms ◑![]()