tx · 9s4HzRGug4Jii9dBtYjSao3raLMji4sJKJfJyhzC4Xdo

3N7a7sTSKaE621QewSqQcL1mUbknJjnLkZc:  -0.01000000 Waves

2021.10.22 18:05 [1757664] smart account 3N7a7sTSKaE621QewSqQcL1mUbknJjnLkZc > SELF 0.00000000 Waves

{ "type": 13, "id": "9s4HzRGug4Jii9dBtYjSao3raLMji4sJKJfJyhzC4Xdo", "fee": 1000000, "feeAssetId": null, "timestamp": 1634915174113, "version": 2, "chainId": 84, "sender": "3N7a7sTSKaE621QewSqQcL1mUbknJjnLkZc", "senderPublicKey": "6LrPmGtwuADhwHYcxBouLzwfSTGgucbwYG5Pja7LUrcd", "proofs": [ "5qjPU1fHLwnWm2AHzHfk5ds6UmUhTPMbZGhm2RksKLQ8Y6dCJrCvEjhWHa1GgwiJw8JvY1oQ9NP8AwVtESm7d1nV" ], "script": "base64:AAIFAAAAAAAAABcIAhIECgIIGRIDCgEBEgMKAQESAwoBAQAAABUAAAAACm9mZmVySWRLZXkCAAAADSRPRkZFUl9OVU1CRVIAAAAAB3Rlc3RLZXkCAAAABSRURVNUAAAAAA9vZmZlck9wZW5TdGF0dXMAAAAAAAAAAAEAAAAAE29mZmVyQ2FuY2VsZWRTdGF0dXMAAAAAAAAAAAIAAAAAE29mZmVyQWNjZXB0ZWRTdGF0dXMAAAAAAAAAAAMAAAAAE29mZmVyUmVqZWN0ZWRTdGF0dXMAAAAAAAAAAAQAAAAAEndhdmVzU3RhbmRJblN0cmluZwIAAAAFV0FWRVMAAAAAFndhdmVzU3RhbmRJbkJ5dGVWZWN0b3IJAAGbAAAAAQUAAAASd2F2ZXNTdGFuZEluU3RyaW5nAAAAABJ3YXZlc1N0YW5kSW5CYXNlNjQJAAJaAAAAAQUAAAAWd2F2ZXNTdGFuZEluQnl0ZVZlY3RvcgEAAAARZ2V0T2ZmZXJTdGF0dXNLZXkAAAABAAAAB29mZmVySWQJAAEsAAAAAgkAAaQAAAABBQAAAAdvZmZlcklkAgAAAAdfc3RhdHVzAQAAABZnZXRPZmZlckFkZHJlc3NGcm9tS2V5AAAAAQAAAAdvZmZlcklkCQABLAAAAAIJAAGkAAAAAQUAAAAHb2ZmZXJJZAIAAAAFX2Zyb20BAAAAFGdldE9mZmVyQWRkcmVzc1RvS2V5AAAAAQAAAAdvZmZlcklkCQABLAAAAAIJAAGkAAAAAQUAAAAHb2ZmZXJJZAIAAAADX3RvAQAAABdnZXRPZmZlck9mZmVyZWRBc3NldEtleQAAAAIAAAAHb2ZmZXJJZAAAAAppdGVtTnVtYmVyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABpAAAAAEFAAAAB29mZmVySWQCAAAAAV8JAAGkAAAAAQUAAAAKaXRlbU51bWJlcgIAAAARX29mZmVyZWRfYXNzZXRfaWQBAAAAGGdldE9mZmVyT2ZmZXJlZEFtb3VudEtleQAAAAIAAAAHb2ZmZXJJZAAAAAppdGVtTnVtYmVyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABpAAAAAEFAAAAB29mZmVySWQCAAAAAV8JAAGkAAAAAQUAAAAKaXRlbU51bWJlcgIAAAAVX29mZmVyZWRf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ZEtleQUAAAAHb2ZmZXJJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldE9mZmVyU3RhdHVzS2V5AAAAAQUAAAAHb2ZmZXJJZAUAAAAPb2ZmZXJPcGVuU3RhdHVzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABZnZXRPZmZlckFkZHJlc3NGcm9tS2V5AAAAAQUAAAAHb2ZmZXJJZAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRnZXRPZmZlckFkZHJlc3NUb0tleQAAAAEFAAAAB29mZmVySWQFAAAACXRvQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAXZ2V0T2ZmZXJPZmZlcmVkQXNzZXRLZXkAAAACBQAAAAdvZmZlcklkAAAAAAAAAAAACQACWgAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIIBQAAAAxmaXJzdFBheW1lbnQAAAAHYXNzZXRJZAUAAAAWd2F2ZXNTdGFuZEluQnl0ZVZlY3RvcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGGdldE9mZmVyT2ZmZXJlZEFtb3VudEtleQAAAAIFAAAAB29mZmVySWQAAAAAAAAAAAAIBQAAAAxmaXJzdFBheW1lbnQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABVnZXRPZmZlckFza2VkQXNzZXRLZXkAAAACBQAAAAdvZmZlcklkAAAAAAAAAAAACQACWgAAAAEJAQAAABp0cnlHZXRBc3NldElkRnJvbUFzc2V0TGlzdAAAAAEFAAAABmFzc2V0MAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmdldE9mZmVyQXNrZWRBbW91bnRLZXkAAAACBQAAAAdvZmZlcklkAAAAAAAAAAAACQEAAAAZdHJ5R2V0QW1vdW50RnJvbUFzc2V0TGlzdAAAAAEFAAAABmFzc2V0MAUAAAADbmlsAAAAAWkBAAAAC2NhbmNlbE9mZmVyAAAAAQAAAAdvZmZlcklkBAAAAAtvZmZlclN0YXR1cwkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARZ2V0T2ZmZXJTdGF0dXNLZXkAAAABBQAAAAdvZmZlcklkAwkBAAAAAiE9AAAAAgUAAAALb2ZmZXJTdGF0dXMFAAAAD29mZmVyT3BlblN0YXR1cwkAAAIAAAABAgAAABlvZmZlciBzdGF0dXMgbXVzdCBiZSBvcGVuBAAAAAthZGRyZXNzRnJvbQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAAFmdldE9mZmVyQWRkcmVzc0Zyb21LZXkAAAABBQAAAAdvZmZlcklkBAAAAAljYWxsZXJTdHIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAIhPQAAAAIFAAAAC2FkZHJlc3NGcm9tBQAAAAljYWxsZXJTdHIJAAACAAAAAQIAAAAcb2ZmZXIgbXVzdCBiZSBtYWRlIGJ5IGNhbGxlcgkBAAAACWRyb3BPZmZlcgAAAAIFAAAAB29mZmVySWQFAAAAE29mZmVyQ2FuY2VsZWRTdGF0dXMAAAABaQEAAAALYWNjZXB0T2ZmZXIAAAABAAAAB29mZmVySWQEAAAAC29mZmVyU3RhdHVzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABFnZXRPZmZlclN0YXR1c0tleQAAAAEFAAAAB29mZmVySWQDCQEAAAACIT0AAAACBQAAAAtvZmZlclN0YXR1cwUAAAAPb2ZmZXJPcGVuU3RhdHVzCQAAAgAAAAECAAAAGW9mZmVyIHN0YXR1cyBtdXN0IGJlIG9wZW4EAAAACWFkZHJlc3NUbwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAAFGdldE9mZmVyQWRkcmVzc1RvS2V5AAAAAQUAAAAHb2ZmZXJJZAQAAAAJY2FsbGVyU3RyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACBQAAAAlhZGRyZXNzVG8FAAAACWNhbGxlclN0cgkAAAIAAAABAgAAABxvZmZlciBtdXN0IGJlIG1hZGUgdG8gY2FsbGVyBAAAAA1hc2tlZEFzc2V0MElkCQEAAAANdHJ5R2V0QXNzZXRJZAAAAAEJAQAAABVnZXRPZmZlckFza2VkQXNzZXRLZXkAAAACBQAAAAdvZmZlcklkAAAAAAAAAAAABAAAABFhc2tlZEFzc2V0MEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAWZ2V0T2ZmZXJBc2tlZEFtb3VudEtleQAAAAIFAAAAB29mZmVySWQAAAAAAAAAAAAEAAAADGZpcnN0UGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAADGZpcnN0UGF5bWVudAkAAAIAAAABAgAAAApubyBwYXltZW50AwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAdhc3NldElkBQAAAA1hc2tlZEFzc2V0MElkCQAAAgAAAAECAAAADm5vdCBzYW1lIGFzc2V0AwkBAAAAAiE9AAAAAggFAAAADGZpcnN0UGF5bWVudAAAAAZhbW91bnQFAAAAEWFza2VkQXNzZXQwQW1vdW50CQAAAgAAAAECAAAAD25vdCBzYW1lIGFtb3VudAQAAAAPb2ZmZXJlZEFzc2V0MElkCQEAAAANdHJ5R2V0QXNzZXRJZAAAAAEJAQAAABdnZXRPZmZlck9mZmVyZWRBc3NldEtleQAAAAIFAAAAB29mZmVySWQAAAAAAAAAAAAEAAAAE29mZmVyZWRBc3NldDBBbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAGGdldE9mZmVyT2ZmZXJlZEFtb3VudEtleQAAAAIFAAAAB29mZmVySWQAAAAAAAAAAAAEAAAAFGFkZHJlc3NGcm9tQXNBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAAFmdldE9mZmVyQWRkcmVzc0Zyb21LZXkAAAABBQAAAAdvZmZlcklkBAAAABJhZGRyZXNzVG9Bc0FkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQEAAAAWZ2V0T2ZmZXJBZGRyZXNzRnJvbUtleQAAAAEFAAAAB29mZmVySWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRPZmZlclN0YXR1c0tleQAAAAEFAAAAB29mZmVySWQFAAAAE29mZmVyQWNjZXB0ZWRTdGF0dXMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAUYWRkcmVzc0Zyb21Bc0FkZHJlc3MFAAAAEWFza2VkQXNzZXQwQW1vdW50BQAAAA1hc2tlZEFzc2V0MElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEmFkZHJlc3NUb0FzQWRkcmVzcwUAAAATb2ZmZXJlZEFzc2V0MEFtb3VudAUAAAAPb2ZmZXJlZEFzc2V0MElkBQAAAANuaWwAAAABaQEAAAALcmVqZWN0T2ZmZXIAAAABAAAAB29mZmVySWQEAAAAC29mZmVyU3RhdHVzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABFnZXRPZmZlclN0YXR1c0tleQAAAAEFAAAAB29mZmVySWQDCQEAAAACIT0AAAACBQAAAAtvZmZlclN0YXR1cwUAAAAPb2ZmZXJPcGVuU3RhdHVzCQAAAgAAAAECAAAAGW9mZmVyIHN0YXR1cyBtdXN0IGJlIG9wZW4EAAAACWFkZHJlc3NUbwkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAAFGdldE9mZmVyQWRkcmVzc1RvS2V5AAAAAQUAAAAHb2ZmZXJJZAQAAAAJY2FsbGVyU3RyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACBQAAAAlhZGRyZXNzVG8FAAAACWNhbGxlclN0cgkAAAIAAAABAgAAABxvZmZlciBtdXN0IGJlIG1hZGUgdG8gY2FsbGVyCQEAAAAJZHJvcE9mZmVyAAAAAgUAAAAHb2ZmZXJJZAUAAAATb2ZmZXJSZWplY3RlZFN0YXR1cwAAAACuqEbJ", "height": 1757664, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: trJuHoX1NitFuvuN9RLQ4nq5rCwRBmH4qXBDwrvjfFu Next: EoQ5H2avxZKPCvwRrn7ZsNX841NZ9Ugb1CCkykAKJdYC Diff:
OldNewDifferences
7373 }
7474
7575
76-func tryGetAssetId (offerId,itemNumber) = {
77- let val = fromBase64String(getStringValue(this, getOfferOfferedAssetKey(offerId, itemNumber)))
76+func tryGetAssetId (key) = {
77+ let val = fromBase64String(getStringValue(this, key))
7878 if ((val == wavesStandInByteVector))
7979 then unit
8080 else val
8383
8484 func dropOffer (offerId,dropStatus) = {
8585 let addressFrom = Address(fromBase58String(getStringValue(this, getOfferAddressFromKey(offerId))))
86- let assetId = tryGetAssetId(offerId, 0)
86+ let assetId = tryGetAssetId(getOfferOfferedAssetKey(offerId, 0))
8787 let assetAmount = tryGetInteger(getOfferOfferedAmountKey(offerId, 0))
8888 [IntegerEntry(getOfferStatusKey(offerId), dropStatus), ScriptTransfer(addressFrom, assetAmount, assetId)]
8989 }
126126 let callerStr = toBase58String(i.caller.bytes)
127127 if ((addressTo != callerStr))
128128 then throw("offer must be made to caller")
129- else [IntegerEntry(getOfferStatusKey(offerId), offerAcceptedStatus)]
129+ else {
130+ let askedAsset0Id = tryGetAssetId(getOfferAskedAssetKey(offerId, 0))
131+ let askedAsset0Amount = tryGetInteger(getOfferAskedAmountKey(offerId, 0))
132+ let firstPayment = value(i.payments[0])
133+ if (!(isDefined(firstPayment)))
134+ then throw("no payment")
135+ else if ((firstPayment.assetId != askedAsset0Id))
136+ then throw("not same asset")
137+ else if ((firstPayment.amount != askedAsset0Amount))
138+ then throw("not same amount")
139+ else {
140+ let offeredAsset0Id = tryGetAssetId(getOfferOfferedAssetKey(offerId, 0))
141+ let offeredAsset0Amount = tryGetInteger(getOfferOfferedAmountKey(offerId, 0))
142+ let addressFromAsAddress = Address(fromBase58String(getStringValue(this, getOfferAddressFromKey(offerId))))
143+ let addressToAsAddress = Address(fromBase58String(getStringValue(this, getOfferAddressFromKey(offerId))))
144+[IntegerEntry(getOfferStatusKey(offerId), offerAcceptedStatus), ScriptTransfer(addressFromAsAddress, askedAsset0Amount, askedAsset0Id), ScriptTransfer(addressToAsAddress, offeredAsset0Amount, offeredAsset0Id)]
145+ }
146+ }
130147 }
131148 }
132149
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let offerIdKey = "$OFFER_NUMBER"
55
66 let testKey = "$TEST"
77
88 let offerOpenStatus = 1
99
1010 let offerCanceledStatus = 2
1111
1212 let offerAcceptedStatus = 3
1313
1414 let offerRejectedStatus = 4
1515
1616 let wavesStandInString = "WAVES"
1717
1818 let wavesStandInByteVector = toBytes(wavesStandInString)
1919
2020 let wavesStandInBase64 = toBase64String(wavesStandInByteVector)
2121
2222 func getOfferStatusKey (offerId) = (toString(offerId) + "_status")
2323
2424
2525 func getOfferAddressFromKey (offerId) = (toString(offerId) + "_from")
2626
2727
2828 func getOfferAddressToKey (offerId) = (toString(offerId) + "_to")
2929
3030
3131 func getOfferOfferedAssetKey (offerId,itemNumber) = (((toString(offerId) + "_") + toString(itemNumber)) + "_offered_asset_id")
3232
3333
3434 func getOfferOfferedAmountKey (offerId,itemNumber) = (((toString(offerId) + "_") + toString(itemNumber)) + "_offered_asset_amount")
3535
3636
3737 func getOfferAskedAssetKey (offerId,itemNumber) = (((toString(offerId) + "_") + toString(itemNumber)) + "_asked_asset_id")
3838
3939
4040 func getOfferAskedAmountKey (offerId,itemNumber) = (((toString(offerId) + "_") + toString(itemNumber)) + "_asked_asset_amount")
4141
4242
4343 func tryGetInteger (key) = {
4444 let val = match getInteger(this, key) {
4545 case b: Int =>
4646 b
4747 case _ =>
4848 0
4949 }
5050 val
5151 }
5252
5353
5454 func tryGetAssetIdFromAssetList (asset) = {
5555 let res = match asset[0] {
5656 case b: String =>
5757 toBytes(b)
5858 case _ =>
5959 throw("must have an assetId")
6060 }
6161 res
6262 }
6363
6464
6565 func tryGetAmountFromAssetList (asset) = {
6666 let res = match asset[1] {
6767 case b: Int =>
6868 b
6969 case _ =>
7070 throw("must have an amount")
7171 }
7272 res
7373 }
7474
7575
76-func tryGetAssetId (offerId,itemNumber) = {
77- let val = fromBase64String(getStringValue(this, getOfferOfferedAssetKey(offerId, itemNumber)))
76+func tryGetAssetId (key) = {
77+ let val = fromBase64String(getStringValue(this, key))
7878 if ((val == wavesStandInByteVector))
7979 then unit
8080 else val
8181 }
8282
8383
8484 func dropOffer (offerId,dropStatus) = {
8585 let addressFrom = Address(fromBase58String(getStringValue(this, getOfferAddressFromKey(offerId))))
86- let assetId = tryGetAssetId(offerId, 0)
86+ let assetId = tryGetAssetId(getOfferOfferedAssetKey(offerId, 0))
8787 let assetAmount = tryGetInteger(getOfferOfferedAmountKey(offerId, 0))
8888 [IntegerEntry(getOfferStatusKey(offerId), dropStatus), ScriptTransfer(addressFrom, assetAmount, assetId)]
8989 }
9090
9191
9292 @Callable(i)
9393 func createOffer (toAddress,asset0) = {
9494 let offerId = (tryGetInteger(offerIdKey) + 1)
9595 let firstPayment = value(i.payments[0])
9696 if (!(isDefined(firstPayment)))
9797 then throw("no payment")
9898 else [IntegerEntry(offerIdKey, offerId), IntegerEntry(getOfferStatusKey(offerId), offerOpenStatus), StringEntry(getOfferAddressFromKey(offerId), toBase58String(i.caller.bytes)), StringEntry(getOfferAddressToKey(offerId), toAddress), StringEntry(getOfferOfferedAssetKey(offerId, 0), toBase64String(valueOrElse(firstPayment.assetId, wavesStandInByteVector))), IntegerEntry(getOfferOfferedAmountKey(offerId, 0), firstPayment.amount), StringEntry(getOfferAskedAssetKey(offerId, 0), toBase64String(tryGetAssetIdFromAssetList(asset0))), IntegerEntry(getOfferAskedAmountKey(offerId, 0), tryGetAmountFromAssetList(asset0))]
9999 }
100100
101101
102102
103103 @Callable(i)
104104 func cancelOffer (offerId) = {
105105 let offerStatus = tryGetInteger(getOfferStatusKey(offerId))
106106 if ((offerStatus != offerOpenStatus))
107107 then throw("offer status must be open")
108108 else {
109109 let addressFrom = getStringValue(this, getOfferAddressFromKey(offerId))
110110 let callerStr = toBase58String(i.caller.bytes)
111111 if ((addressFrom != callerStr))
112112 then throw("offer must be made by caller")
113113 else dropOffer(offerId, offerCanceledStatus)
114114 }
115115 }
116116
117117
118118
119119 @Callable(i)
120120 func acceptOffer (offerId) = {
121121 let offerStatus = tryGetInteger(getOfferStatusKey(offerId))
122122 if ((offerStatus != offerOpenStatus))
123123 then throw("offer status must be open")
124124 else {
125125 let addressTo = getStringValue(this, getOfferAddressToKey(offerId))
126126 let callerStr = toBase58String(i.caller.bytes)
127127 if ((addressTo != callerStr))
128128 then throw("offer must be made to caller")
129- else [IntegerEntry(getOfferStatusKey(offerId), offerAcceptedStatus)]
129+ else {
130+ let askedAsset0Id = tryGetAssetId(getOfferAskedAssetKey(offerId, 0))
131+ let askedAsset0Amount = tryGetInteger(getOfferAskedAmountKey(offerId, 0))
132+ let firstPayment = value(i.payments[0])
133+ if (!(isDefined(firstPayment)))
134+ then throw("no payment")
135+ else if ((firstPayment.assetId != askedAsset0Id))
136+ then throw("not same asset")
137+ else if ((firstPayment.amount != askedAsset0Amount))
138+ then throw("not same amount")
139+ else {
140+ let offeredAsset0Id = tryGetAssetId(getOfferOfferedAssetKey(offerId, 0))
141+ let offeredAsset0Amount = tryGetInteger(getOfferOfferedAmountKey(offerId, 0))
142+ let addressFromAsAddress = Address(fromBase58String(getStringValue(this, getOfferAddressFromKey(offerId))))
143+ let addressToAsAddress = Address(fromBase58String(getStringValue(this, getOfferAddressFromKey(offerId))))
144+[IntegerEntry(getOfferStatusKey(offerId), offerAcceptedStatus), ScriptTransfer(addressFromAsAddress, askedAsset0Amount, askedAsset0Id), ScriptTransfer(addressToAsAddress, offeredAsset0Amount, offeredAsset0Id)]
145+ }
146+ }
130147 }
131148 }
132149
133150
134151
135152 @Callable(i)
136153 func rejectOffer (offerId) = {
137154 let offerStatus = tryGetInteger(getOfferStatusKey(offerId))
138155 if ((offerStatus != offerOpenStatus))
139156 then throw("offer status must be open")
140157 else {
141158 let addressTo = getStringValue(this, getOfferAddressToKey(offerId))
142159 let callerStr = toBase58String(i.caller.bytes)
143160 if ((addressTo != callerStr))
144161 then throw("offer must be made to caller")
145162 else dropOffer(offerId, offerRejectedStatus)
146163 }
147164 }
148165
149166

github/deemru/w8io/026f985 
52.10 ms