tx · 5Sbdp8bsXZFhQCmKyuLBP53Ta1HfHB9sm4JbqXAWv9iD

3MpKvUfNxrgF7QotPjFwi8thMagSveNScKe:  -0.01400000 Waves

2020.11.10 18:39 [1259442] smart account 3MpKvUfNxrgF7QotPjFwi8thMagSveNScKe > SELF 0.00000000 Waves

{ "type": 13, "id": "5Sbdp8bsXZFhQCmKyuLBP53Ta1HfHB9sm4JbqXAWv9iD", "fee": 1400000, "feeAssetId": null, "timestamp": 1605022785541, "version": 2, "chainId": 84, "sender": "3MpKvUfNxrgF7QotPjFwi8thMagSveNScKe", "senderPublicKey": "9GE2xN4fms9YNDxR1hGg52RynqDd8125TA42g4X29ZV7", "proofs": [ "44YAtPm4WiVEFp3cXpeFSbmErtpJZ1E1HM36x7XFz4HqtbTvhghL97qdfgJ3KcxHDR3anxoLSPtGVqCYXiXtLqct" ], "script": "base64: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", "height": 1259442, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A3zUQAMN52oDDVDcmChLRTMxfVz8ir2ZJU65egy6Mwed Next: AGUmHk5ndUsGSLdTyz5KcRdDWrPqxu2e7je2xaxuGH83 Diff:
OldNewDifferences
1616 }
1717
1818
19-func compareHash (c,h) = (keccak256(blake2b256(toBytes(c))) == fromBase58String(h))
19+func verification (m,s) = {
20+ let getMsg = toBytes(toBase58String(keccak256(blake2b256(toBytes(m)))))
21+ sigVerify(getMsg, fromBase58String(s), base58'C8jRoXECFheT6JPcAkcyWPadYbxBA6tSyAqXqjq5dicS')
22+ }
2023
2124
2225 @Callable(i)
23-func opbrBuy (tokenId,qtd,price,hash) = {
26+func opbrBuy (tokenId,qtd,price,sig) = {
2427 let buyerAddr = toBase58String(i.caller.bytes)
2528 let pmt = i.payments
2629 let allowed = getAllowedTokens(tokenId)
2831 then throw("Payment for exchange is mandatory")
2932 else if ((size(pmt) == 2))
3033 then throw("Only one payment per transaction is allowed")
31- else if (!(compareHash((tokenId + toString(((qtd + price) + pmt[0].amount))), hash)))
32- then throw("Purchase information is incompatible")
34+ else if (!(verification((tokenId + toString((qtd + pmt[0].amount))), sig)))
35+ then throw("Stop hacking me!")
3336 else if (if (isDefined(pmt[0].assetId))
3437 then (allowed == false)
3538 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let cf = addressFromPublicKey(fromBase58String("J7vyoUA8Gd5QMq4YVtedpv19dwCYroZEYrN8bKgLzqV8"))
55
66 let opbr = base58'HMov2457acf5MEJr85fvXYL3vrTEevFpsEQkHh1yfdUT'
77
88 func getAllowedTokens (tokenId) = {
99 let allow = match getString(this, tokenId) {
1010 case a: String =>
1111 a
1212 case _ =>
1313 false
1414 }
1515 allow
1616 }
1717
1818
19-func compareHash (c,h) = (keccak256(blake2b256(toBytes(c))) == fromBase58String(h))
19+func verification (m,s) = {
20+ let getMsg = toBytes(toBase58String(keccak256(blake2b256(toBytes(m)))))
21+ sigVerify(getMsg, fromBase58String(s), base58'C8jRoXECFheT6JPcAkcyWPadYbxBA6tSyAqXqjq5dicS')
22+ }
2023
2124
2225 @Callable(i)
23-func opbrBuy (tokenId,qtd,price,hash) = {
26+func opbrBuy (tokenId,qtd,price,sig) = {
2427 let buyerAddr = toBase58String(i.caller.bytes)
2528 let pmt = i.payments
2629 let allowed = getAllowedTokens(tokenId)
2730 if ((size(pmt) == 0))
2831 then throw("Payment for exchange is mandatory")
2932 else if ((size(pmt) == 2))
3033 then throw("Only one payment per transaction is allowed")
31- else if (!(compareHash((tokenId + toString(((qtd + price) + pmt[0].amount))), hash)))
32- then throw("Purchase information is incompatible")
34+ else if (!(verification((tokenId + toString((qtd + pmt[0].amount))), sig)))
35+ then throw("Stop hacking me!")
3336 else if (if (isDefined(pmt[0].assetId))
3437 then (allowed == false)
3538 else false)
3639 then throw("The used token is not accepted")
3740 else if (if (isDefined(pmt[0].assetId))
3841 then (fromBase58String(tokenId) != pmt[0].assetId)
3942 else false)
4043 then throw("declared token is different from submitted token")
4144 else {
4245 let c = fraction(1, pmt[0].amount, 100)
4346 [ScriptTransfer(i.caller, qtd, opbr), ScriptTransfer(cf, c, pmt[0].assetId)]
4447 }
4548 }
4649
4750
4851
4952 @Callable(i)
5053 func tokenList (tokenId,ticker) = {
5154 let Addr = toBase58String(i.caller.bytes)
5255 if (if ((Addr != toString(this)))
5356 then (Addr != toString(cf))
5457 else false)
5558 then throw("The address is not authorized to list tokens")
5659 else [StringEntry(tokenId, ticker), ScriptTransfer(cf, 1000000, unit)]
5760 }
5861
5962
6063
6164 @Callable(i)
6265 func tokenDelist (tokenId) = {
6366 let Addr = toBase58String(i.caller.bytes)
6467 if (if ((Addr != toString(this)))
6568 then (Addr != toString(cf))
6669 else false)
6770 then throw("The address is not authorized to delist tokens")
6871 else [DeleteEntry(tokenId), ScriptTransfer(cf, 10000000, unit)]
6972 }
7073
7174
7275 @Verifier(tx)
7376 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
7477

github/deemru/w8io/6500d08 
33.60 ms