tx · C9N3j5q3CGboLtgp1YucQhACftDU1XhhnKiwGxkwzUY6 3N2JnmRgkCg2nVUkd2199rBgZ6fUviUcDuz: -0.01000000 Waves 2019.08.13 14:29 [629249] smart account 3N2JnmRgkCg2nVUkd2199rBgZ6fUviUcDuz > SELF 0.00000000 Waves
{ "type": 13, "id": "C9N3j5q3CGboLtgp1YucQhACftDU1XhhnKiwGxkwzUY6", "fee": 1000000, "feeAssetId": null, "timestamp": 1565695814569, "version": 1, "sender": "3N2JnmRgkCg2nVUkd2199rBgZ6fUviUcDuz", "senderPublicKey": "H3wNmx7mrNKvXnz4TvYTn2Kms41xmvicwMvVdvGCQE79", "proofs": [ "4XZLPmL22rky6e6FZdaTEYoQLuiW8k9jMTywj6peAHqccKQnL5kG2izQEs4KSfPVdPu6GHdMx4KSeu95ph5S9AsU" ], "script": "base64:AAIDAAAAAAAAAAAAAAABAAAAAAx3YXZlc0Fzc2V0SWQBAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAFpAQAAAARzZWxsAAAAAgAAAAVwcmljZQAAAApwcmljZUFzc2V0BAAAAAFwCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQAAAAAAAAIIBQAAAAFwAAAAB2Fzc2V0SWQFAAAABHVuaXQJAAACAAAAAQIAAAAVWW91IGNhbid0IHNlbGwgV2F2ZXMuAwkAAGcAAAACAAAAAAAAAAAACAUAAAABcAAAAAZhbW91bnQJAAACAAAAAQIAAAASWW91IGNhbid0IG5vdGhpbmcuCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAADLAAAAAgkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAZoAAAABBQAAAAVwcmljZQkAAZoAAAABCAUAAAABcAAAAAZhbW91bnQFAAAACnByaWNlQXNzZXQJAQAAAAdleHRyYWN0AAAAAQgJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAAAAAdhc3NldElkCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAA25pbAAAAAFpAQAAAAZjYW5jZWwAAAABAAAAAmlkBAAAAARkYXRhCQEAAAAHZXh0cmFjdAAAAAEJAAQcAAAAAgUAAAAEdGhpcwUAAAACaWQEAAAABXByaWNlCQAEsQAAAAEJAADJAAAAAgUAAAAEZGF0YQAAAAAAAAAACAQAAAAGYW1vdW50CQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAARkYXRhAAAAAAAAAAAAAAAAAAAAAAAIBAAAAApwcmljZUFzc2V0CQAAyQAAAAIJAADKAAAAAgUAAAAEZGF0YQkAAGQAAAACAAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAgBAAAAAthbW91bnRBc3NldAkAAMkAAAACCQAAygAAAAIFAAAABGRhdGEJAABkAAAAAgkAAGQAAAACAAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAgAAAAAAAAAAAgBAAAAAZzZWxsZXIJAADKAAAAAgUAAAAEZGF0YQkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAIAAAAAAAAAAAIAMJAQAAAAIhPQAAAAIFAAAABnNlbGxlcggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAADUludmFsaWQgdXNlci4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAJpZAkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACCQABmgAAAAEFAAAABXByaWNlCQABmgAAAAEAAAAAAAAAAAAFAAAACnByaWNlQXNzZXQFAAAAC2Ftb3VudEFzc2V0BQAAAAZzZWxsZXIFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAZzZWxsZXIFAAAABmFtb3VudAUAAAALYW1vdW50QXNzZXQFAAAAA25pbAAAAAFpAQAAAANidXkAAAABAAAAAmlkBAAAAARkYXRhCQEAAAAHZXh0cmFjdAAAAAEJAAQcAAAAAgUAAAAEdGhpcwUAAAACaWQEAAAABXByaWNlCQAEsQAAAAEJAADJAAAAAgUAAAAEZGF0YQAAAAAAAAAACAQAAAAGYW1vdW50CQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAARkYXRhAAAAAAAAAAAAAAAAAAAAAAAIBAAAAAJwcgkAAMkAAAACCQAAygAAAAIFAAAABGRhdGEJAABkAAAAAgAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAIAQAAAAKcHJpY2VBc3NldAMJAAAAAAAAAgUAAAACcHIFAAAADHdhdmVzQXNzZXRJZAUAAAAEdW5pdAUAAAACcHIEAAAAC2Ftb3VudEFzc2V0CQAAyQAAAAIJAADKAAAAAgUAAAAEZGF0YQkAAGQAAAACCQAAZAAAAAIAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAACAAAAAAAAAAACAEAAAABnNlbGxlcgkAAMoAAAACBQAAAARkYXRhCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAgAAAAAAAAAAAgBAAAAAFwCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAC2Ftb3VudFRvQnV5CQAAaQAAAAIIBQAAAAFwAAAABmFtb3VudAUAAAAFcHJpY2UDCQAAAAAAAAIIBQAAAAFwAAAAB2Fzc2V0SWQFAAAADHdhdmVzQXNzZXRJZAkAAAIAAAABAgAAABZJbnZhbGlkIHBheW1lbnQgYXNzZXQuAwkAAGcAAAACAAAAAAAAAAAABQAAAAthbW91bnRUb0J1eQkAAAIAAAABAgAAABdJbnZhbGlkIHBheW1lbnQgYW1vdW50LgMJAQAAAAIhPQAAAAIJAABoAAAAAgUAAAALYW1vdW50VG9CdXkFAAAABXByaWNlCAUAAAABcAAAAAZhbW91bnQJAAACAAAAAQIAAAAXSW52YWxpZCBwYXltZW50IGFtb3VudC4DCQEAAAACIT0AAAACCQAAyAAAAAEFAAAABGRhdGEJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAAAIAkAAAIAAAABAgAAABpBbHJlYWR5IHNvbGQgb3IgY2FuY2VsbGVkLgMJAABmAAAAAgUAAAALYW1vdW50VG9CdXkFAAAABmFtb3VudAkAAAIAAAABAgAAABpOb3QgZW5vdWdoIGl0ZW1zIGluIHN0b2NrLgMDCQEAAAACIT0AAAACBQAAAApwcmljZUFzc2V0CAUAAAABcAAAAAdhc3NldElkBgkBAAAAASEAAAABAwkAAAAAAAACBQAAAApwcmljZUFzc2V0BQAAAAx3YXZlc0Fzc2V0SWQJAAAAAAAAAggFAAAAAXAAAAAHYXNzZXRJZAUAAAAEdW5pdAcJAAACAAAAAQIAAAAWSW52YWxpZCBwYXltZW50IGFzc2V0LgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAAmlkCQAAywAAAAIJAADLAAAAAgkAAMsAAAACCQAAywAAAAIJAAGaAAAAAQUAAAAFcHJpY2UJAAGaAAAAAQkAAGUAAAACBQAAAAZhbW91bnQFAAAAC2Ftb3VudFRvQnV5AwkAAAAAAAACBQAAAApwcmljZUFzc2V0BQAAAAR1bml0BQAAAAx3YXZlc0Fzc2V0SWQFAAAAAnByBQAAAAthbW91bnRBc3NldAUAAAAGc2VsbGVyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAthbW91bnRUb0J1eQUAAAALYW1vdW50QXNzZXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAGc2VsbGVyBQAAAAVwcmljZQUAAAAKcHJpY2VBc3NldAUAAAADbmlsAAAAAB4//9c=", "chainId": 84, "height": 629249, "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 wavesAssetId = base58'11111111111111111111111111111111' | |
5 | + | ||
6 | + | @Callable(i) | |
7 | + | func sell (price,priceAsset) = { | |
8 | + | let p = extract(i.payment) | |
9 | + | if ((p.assetId == unit)) | |
10 | + | then throw("You can't sell Waves.") | |
11 | + | else if ((0 >= p.amount)) | |
12 | + | then throw("You can't nothing.") | |
13 | + | else WriteSet([DataEntry(toBase58String(i.transactionId), ((((toBytes(price) + toBytes(p.amount)) + priceAsset) + extract(extract(i.payment).assetId)) + i.callerPublicKey))]) | |
14 | + | } | |
15 | + | ||
16 | + | ||
17 | + | ||
18 | + | @Callable(i) | |
19 | + | func cancel (id) = { | |
20 | + | let data = extract(getBinary(this, id)) | |
21 | + | let price = toInt(take(data, 8)) | |
22 | + | let amount = toInt(take(drop(data, 0), 8)) | |
23 | + | let priceAsset = take(drop(data, (8 + 8)), 32) | |
24 | + | let amountAsset = take(drop(data, ((8 + 8) + 32)), 32) | |
25 | + | let seller = drop(data, (((8 + 8) + 32) + 32)) | |
26 | + | if ((seller != i.callerPublicKey)) | |
27 | + | then throw("Invalid user.") | |
28 | + | else ScriptResult(WriteSet([DataEntry(id, ((((toBytes(price) + toBytes(0)) + priceAsset) + amountAsset) + seller))]), TransferSet([ScriptTransfer(addressFromPublicKey(seller), amount, amountAsset)])) | |
29 | + | } | |
30 | + | ||
31 | + | ||
32 | + | ||
33 | + | @Callable(i) | |
34 | + | func buy (id) = { | |
35 | + | let data = extract(getBinary(this, id)) | |
36 | + | let price = toInt(take(data, 8)) | |
37 | + | let amount = toInt(take(drop(data, 0), 8)) | |
38 | + | let pr = take(drop(data, (8 + 8)), 32) | |
39 | + | let priceAsset = if ((pr == wavesAssetId)) | |
40 | + | then unit | |
41 | + | else pr | |
42 | + | let amountAsset = take(drop(data, ((8 + 8) + 32)), 32) | |
43 | + | let seller = drop(data, (((8 + 8) + 32) + 32)) | |
44 | + | let p = extract(i.payment) | |
45 | + | let amountToBuy = (p.amount / price) | |
46 | + | if ((p.assetId == wavesAssetId)) | |
47 | + | then throw("Invalid payment asset.") | |
48 | + | else if ((0 >= amountToBuy)) | |
49 | + | then throw("Invalid payment amount.") | |
50 | + | else if (((amountToBuy * price) != p.amount)) | |
51 | + | then throw("Invalid payment amount.") | |
52 | + | else if ((size(data) != ((((8 + 8) + 32) + 32) + 32))) | |
53 | + | then throw("Already sold or cancelled.") | |
54 | + | else if ((amountToBuy > amount)) | |
55 | + | then throw("Not enough items in stock.") | |
56 | + | else if (if ((priceAsset != p.assetId)) | |
57 | + | then true | |
58 | + | else !(if ((priceAsset == wavesAssetId)) | |
59 | + | then (p.assetId == unit) | |
60 | + | else false)) | |
61 | + | then throw("Invalid payment asset.") | |
62 | + | else ScriptResult(WriteSet([DataEntry(id, ((((toBytes(price) + toBytes((amount - amountToBuy))) + (if ((priceAsset == unit)) | |
63 | + | then wavesAssetId | |
64 | + | else pr)) + amountAsset) + seller))]), TransferSet([ScriptTransfer(i.caller, amountToBuy, amountAsset), ScriptTransfer(addressFromPublicKey(seller), price, priceAsset)])) | |
65 | + | } | |
66 | + | ||
67 | + |
github/deemru/w8io/169f3d6 26.17 ms ◑