tx · 8bMnRQmzLS9A2ZX9pv7YRH9ivSWDotTu5SBGQQurnJu5

3P4afSdysXRASK8v5H6MuHy677Qsoo4oTpE:  -0.01000000 Waves

2023.08.07 17:12 [3765893] smart account 3P4afSdysXRASK8v5H6MuHy677Qsoo4oTpE > SELF 0.00000000 Waves

{ "type": 13, "id": "8bMnRQmzLS9A2ZX9pv7YRH9ivSWDotTu5SBGQQurnJu5", "fee": 1000000, "feeAssetId": null, "timestamp": 1691417569591, "version": 2, "chainId": 87, "sender": "3P4afSdysXRASK8v5H6MuHy677Qsoo4oTpE", "senderPublicKey": "BP9daYroQNZabEJJSwDJFWWDVmX4Ct58UoE7XX84USBk", "proofs": [ "SkbzReg9y7JjAb5zdC6tPvQf7NsxkKV2supr9VAWFtM8c3ACidtB7D12jwaNAPHB2RMv7JKbqKD5ybKGet1raMH" ], "script": "base64:BgInCAISBAoCCAgSBAoCCAgSBQoDCAgBEgQKAggIEgMKAQgSAwoBCBIABQAJc2VudGluZWxzCQDMCAIJAQdBZGRyZXNzAQEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAMwIAgkBB0FkZHJlc3MBARoBV/j6+gImwFGL7Go7RjNJ0hxxsHWL+aTKmgkAzAgCCQEHQWRkcmVzcwEBGgFXSQEY9kN/P0xs4Wd15bfkly/eUC2yg93xCQDMCAIJAQdBZGRyZXNzAQEaAVdLw2zO+zNYQ1hDURDu7+4hEBdL8njLfDIFA25pbAAHU2NhbGUxNgCAgIT+pt7hEQEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQ5nZXRBc3NldFN0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWICBVdBVkVTAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIHAWkBC2luaXROZXdQb29sAgphZGRyZXNzU3RyCnBvb2xEb21haW4DCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh5vbmx5IGF2YWlsYWJsZSBmb3Igc2VsZiBpbnZva2UECWFkZHJlc3NPSwQHJG1hdGNoMAkApggBBQphZGRyZXNzU3RyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGBwMJAQEhAQUJYWRkcmVzc09LCQACAQkArAICAhJpbmNvcnJlY3QgYWRkcmVzcyAFCmFkZHJlc3NTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgpzZXR1cF9wb29sBQpwb29sRG9tYWluBQphZGRyZXNzU3RyBQNuaWwBaQEJaW5pdE5ld1BMAgphc3NldElkU3RyCnBvb2xEb21haW4DCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh5vbmx5IGF2YWlsYWJsZSBmb3Igc2VsZiBpbnZva2UDCQAAAgkBDHRyeUdldFN0cmluZwEJAKwCAgIKc2V0dXBfcG9vbAUKcG9vbERvbWFpbgIACQACAQIRcG9vbCBpcyBub3Qga25vd24KAQ1vcmlnaW5hbEFzc2V0AQFhCQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEJAQ1nZXRBc3NldEJ5dGVzAQUBYQQIZGVjaW1hbHMDCQECIT0CBQphc3NldElkU3RyAgVXQVZFUwgJAQ1vcmlnaW5hbEFzc2V0AQUKYXNzZXRJZFN0cghkZWNpbWFscwAIBARuYW1lCQCsAgIJAKwCAgkArAICAgJQTAMJAAACBQpwb29sRG9tYWluAgExAgAFCnBvb2xEb21haW4CASADCQECIT0CBQphc3NldElkU3RyAgVXQVZFUwgJAQ1vcmlnaW5hbEFzc2V0AQUKYXNzZXRJZFN0cgRuYW1lAgVXQVZFUwQEZGVzYwkArAICAilQdXp6bGUgTGVuZCBMUCB0b2tlbi4gRGVyaXZhdGl2ZSBmb3IgdGhlIAMJAQIhPQIFCmFzc2V0SWRTdHICBVdBVkVTCAkBDW9yaWdpbmFsQXNzZXQBBQphc3NldElkU3RyBG5hbWUJAKwCAgIFV0FWRVMCHyB0b2tlbiBvbiB0aGUgV2F2ZXMgYmxvY2tjaGFpbi4EAnBsCQDDCAcFBG5hbWUFBGRlc2MAAAUIZGVjaW1hbHMGBQR1bml0AAAEB3BsSWRTdHIJAQ5nZXRBc3NldFN0cmluZwEJALgIAQUCcGwJAMwIAgUCcGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgIJc2V0dXBfcGxfBQphc3NldElkU3RyAgFfBQpwb29sRG9tYWluBQdwbElkU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgZzZXR1cF8FB3BsSWRTdHICCF9hc3NldElkBQphc3NldElkU3RyBQNuaWwBaQEIZXhwb3J0UEwDCnBvb2xEb21haW4KYXNzZXRJZFN0cgZhbW91bnQEC3Bvb2xBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQEMdHJ5R2V0U3RyaW5nAQkArAICAgpzZXR1cF9wb29sBQpwb29sRG9tYWluBAlwbEFzc2V0SWQJAQ1nZXRBc3NldEJ5dGVzAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICCQCsAgIJAKwCAgIJc2V0dXBfcGxfBQphc3NldElkU3RyAgFfBQpwb29sRG9tYWluBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQQdXNlclN1cHBseUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgULcG9vbEFkZHJlc3MJAKwCAgkArAICBQR1c2VyAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBAphc3NldFNSYXRlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQtwb29sQWRkcmVzcwkArAICBQphc3NldElkU3RyAgZfc1JhdGUECmFtb3VudFJlYWwJAGsDBQZhbW91bnQFCmFzc2V0U1JhdGUFB1NjYWxlMTYEE3VzZXJDb2xsYXRlcmFsQWZ0ZXIJAPwHBAULcG9vbEFkZHJlc3MCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFBHVzZXIJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCyxzdXBwbGllZCwtCQCkAwEFCmFtb3VudFJlYWwFA25pbAUDbmlsAwkAAAIFE3VzZXJDb2xsYXRlcmFsQWZ0ZXIFE3VzZXJDb2xsYXRlcmFsQWZ0ZXIEFnVzZXJDb2xsYXRlcmFsQWZ0ZXJWYWwKAAFABRN1c2VyQ29sbGF0ZXJhbEFmdGVyAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAGYCBQZhbW91bnQFEHVzZXJTdXBwbHlBbW91bnQJAAIBAhtub3QgZW5vdWdoIHN1cHBsaWVkIGJhbGFuY2UDCQBnAgAABRZ1c2VyQ29sbGF0ZXJhbEFmdGVyVmFsCQACAQImdHJhbnNhY3Rpb24gbGVhZHMgdG8gYSBuZWdhdGl2ZSBoZWFsdGgEDXBsVG90YWxBbW91bnQEByRtYXRjaDAJAJoIAgULcG9vbEFkZHJlc3MJAKwCAgIMUExfc3VwcGxpZWRfBQphc3NldElkU3RyAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAABAR1cGQxCQD8BwQFC3Bvb2xBZGRyZXNzAg91cGRhdGVQYXJhbWV0ZXIJAMwIAgkArAICCQCsAgIFBHVzZXICCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAMwIAgkApAMBCQBlAgUQdXNlclN1cHBseUFtb3VudAUGYW1vdW50BQNuaWwFA25pbAMJAAACBQR1cGQxBQR1cGQxBAR1cGQyCQD8BwQFC3Bvb2xBZGRyZXNzAg91cGRhdGVQYXJhbWV0ZXIJAMwIAgkArAICAgxQTF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAMwIAgkApAMBCQBkAgUNcGxUb3RhbEFtb3VudAUGYW1vdW50BQNuaWwFA25pbAMJAAACBQR1cGQyBQR1cGQyCQDMCAIJAQdSZWlzc3VlAwkBBXZhbHVlAQUJcGxBc3NldElkBQZhbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQlwbEFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhpbXBvcnRQTAIKcG9vbERvbWFpbgR1c2VyBAlwbEFzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQHcGxJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUJcGxBc3NldElkBAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAtwb29sQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDHRyeUdldFN0cmluZwEJAKwCAgIKc2V0dXBfcG9vbAUKcG9vbERvbWFpbgQKYXNzZXRJZFN0cgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgZzZXR1cF8FB3BsSWRTdHICCF9hc3NldElkBAlhZGRyZXNzT0sEByRtYXRjaDAJAKYIAQUEdXNlcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcDCQEBIQEFCWFkZHJlc3NPSwkAAgEJAKwCAgISaW5jb3JyZWN0IGFkZHJlc3MgBQR1c2VyBBB1c2VyU3VwcGx5QW1vdW50BAckbWF0Y2gwCQCaCAIFC3Bvb2xBZGRyZXNzCQCsAgIJAKwCAgUEdXNlcgILX3N1cHBsaWVkXysFCmFzc2V0SWRTdHIDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4AAAEDXBsVG90YWxBbW91bnQEByRtYXRjaDAJAJoIAgULcG9vbEFkZHJlc3MJAKwCAgINUExfc3VwcGxpZWRfKwUKYXNzZXRJZFN0cgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgAAAQEdXBkMQkA/AcEBQtwb29sQWRkcmVzcwIPdXBkYXRlUGFyYW1ldGVyCQDMCAIJAKwCAgkArAICBQR1c2VyAgtfc3VwcGxpZWRfKwUKYXNzZXRJZFN0cgkAzAgCCQCkAwEJAGQCBRB1c2VyU3VwcGx5QW1vdW50BQZhbW91bnQFA25pbAUDbmlsAwkAAAIFBHVwZDEFBHVwZDEEBHVwZDIJAPwHBAULcG9vbEFkZHJlc3MCD3VwZGF0ZVBhcmFtZXRlcgkAzAgCCQCsAgICDVBMX3N1cHBsaWVkXysFCmFzc2V0SWRTdHIJAMwIAgkApAMBCQBlAgUNcGxUb3RhbEFtb3VudAUGYW1vdW50BQNuaWwFA25pbAMJAAACBQR1cGQyBQR1cGQyCQDMCAIJAQRCdXJuAgkBBXZhbHVlAQUJcGxBc3NldElkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1pbml0TmV3TWFzdGVyAQZtYXN0ZXIECWFkZHJlc3NPSwQHJG1hdGNoMAkApggBBQZtYXN0ZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAwkBASEBBQlhZGRyZXNzT0sJAAIBCQCsAgICEmluY29ycmVjdCBhZGRyZXNzIAUGbWFzdGVyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYXZhaWxhYmxlIGZvciBzZWxmIGNhbGwgb25seQkAzAgCCQELU3RyaW5nRW50cnkCAg92ZXJpZmllcl9tYXN0ZXIFBm1hc3RlcgUDbmlsAWkBEHJlcXVlc3ROZXdNYXN0ZXIBCW5ld01hc3RlcgQJYWRkcmVzc09LBAckbWF0Y2gwCQCmCAEFCW5ld01hc3RlcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcDCQEBIQEFCWFkZHJlc3NPSwkAAgEJAKwCAgISaW5jb3JyZWN0IGFkZHJlc3MgBQluZXdNYXN0ZXIDCQAAAgkAzwgCBQlzZW50aW5lbHMIBQFpBmNhbGxlcgUEdW5pdAkAAgECDndoaXRlbGlzdCBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICEnZlcmlmaWVyX25ld01hc3RlcgUJbmV3TWFzdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh92ZXJpZmllcl9uZXdNYXN0ZXJFbGlnaWJsZUFmdGVyCQBkAgUGaGVpZ2h0AJBOBQNuaWwBaQERYWN0aXZhdGVOZXdNYXN0ZXIABA5lbGlnaWJsZUhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIfdmVyaWZpZXJfbmV3TWFzdGVyRWxpZ2libGVBZnRlcgQJbmV3TWFzdGVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAhJ2ZXJpZmllcl9uZXdNYXN0ZXIDCQAAAgkAzwgCBQlzZW50aW5lbHMIBQFpBmNhbGxlcgUEdW5pdAkAAgECDndoaXRlbGlzdCBvbmx5AwkAZgIFDmVsaWdpYmxlSGVpZ2h0BQZoZWlnaHQJAAIBAiJuZXcgbWFzdGVyIGNhbm5vdCBiZSBhY3RpdmF0ZWQgeWV0CQDMCAIJAQtEZWxldGVFbnRyeQECEnZlcmlmaWVyX25ld01hc3RlcgkAzAgCCQELRGVsZXRlRW50cnkBAh92ZXJpZmllcl9uZXdNYXN0ZXJFbGlnaWJsZUFmdGVyCQDMCAIJAQtTdHJpbmdFbnRyeQICD3ZlcmlmaWVyX21hc3RlcgUJbmV3TWFzdGVyBQNuaWwBAnR4AQZ2ZXJpZnkABA1tYXN0ZXJBZGRyZXNzCQCiCAECD3ZlcmlmaWVyX21hc3RlcgQQYXBwcm92ZWRCeU1hc3RlcgQHJG1hdGNoMAUNbWFzdGVyQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXgFByRtYXRjaDAEByRtYXRjaDEJAJoIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUBeAkArAICAgthcHByb3ZlZFR4XwkA2AQBCAUCdHgCaWQDCQABAgUHJG1hdGNoMQIDSW50BAF5BQckbWF0Y2gxBQF5AAAAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAGYCBRBhcHByb3ZlZEJ5TWFzdGVyAAAHJoKZaA==", "height": 3765893, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AFRLiMmgqFGF5nmbdudkCycJe3MdQMU5aq7mjDebWwKh Next: 2zdZsjuqSxJXmzYgYBXGFj2KthWs4cCt8HLhMe98Z6GU Diff:
OldNewDifferences
6464 else ("WAVES" + " token on the Waves blockchain.")))
6565 let pl = Issue(name, desc, 0, decimals, true, unit, 0)
6666 let plIdStr = getAssetString(calculateAssetId(pl))
67-[pl, StringEntry(((("setup_pl_" + assetIdStr) + "_") + poolDomain), plIdStr)]
67+[pl, StringEntry(((("setup_pl_" + assetIdStr) + "_") + poolDomain), plIdStr), StringEntry((("setup_" + plIdStr) + "_assetId"), assetIdStr)]
6868 }
6969
7070
115115
116116 @Callable(i)
117117 func importPL (poolDomain,user) = {
118- let assetIdStr = getAssetString(i.payments[0].assetId)
118+ let plAssetId = i.payments[0].assetId
119+ let plIdStr = getAssetString(plAssetId)
119120 let amount = i.payments[0].amount
120121 let poolAddress = addressFromStringValue(tryGetString(("setup_pool" + poolDomain)))
121- let plAssetId = getAssetBytes(getStringValue(((("setup_pl_" + assetIdStr) + "_") + poolDomain)))
122+ let assetIdStr = tryGetString((("setup_" + plIdStr) + "_assetId"))
122123 let addressOK = match addressFromString(user) {
123124 case a: Address =>
124125 true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let sentinels = [Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'), Address(base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o'), Address(base58'3P8auNWJkxxByyJtwErFXaxiXcGM45qQ1hA'), Address(base58'3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd')]
55
66 let Scale16 = 10000000000000000
77
88 func tryGetString (key) = match getString(this, key) {
99 case b: String =>
1010 b
1111 case _ =>
1212 ""
1313 }
1414
1515
1616 func getAssetString (assetId) = match assetId {
1717 case b: ByteVector =>
1818 toBase58String(b)
1919 case _ =>
2020 "WAVES"
2121 }
2222
2323
2424 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
2525 then unit
2626 else fromBase58String(assetIdStr)
2727
2828
2929 @Callable(i)
3030 func initNewPool (addressStr,poolDomain) = if ((i.caller != this))
3131 then throw("only available for self invoke")
3232 else {
3333 let addressOK = match addressFromString(addressStr) {
3434 case a: Address =>
3535 true
3636 case _ =>
3737 false
3838 }
3939 if (!(addressOK))
4040 then throw(("incorrect address " + addressStr))
4141 else [StringEntry(("setup_pool" + poolDomain), addressStr)]
4242 }
4343
4444
4545
4646 @Callable(i)
4747 func initNewPL (assetIdStr,poolDomain) = if ((i.caller != this))
4848 then throw("only available for self invoke")
4949 else if ((tryGetString(("setup_pool" + poolDomain)) == ""))
5050 then throw("pool is not known")
5151 else {
5252 func originalAsset (a) = value(assetInfo(value(getAssetBytes(a))))
5353
5454 let decimals = if ((assetIdStr != "WAVES"))
5555 then originalAsset(assetIdStr).decimals
5656 else 8
5757 let name = ((("PL" + (if ((poolDomain == "1"))
5858 then ""
5959 else poolDomain)) + " ") + (if ((assetIdStr != "WAVES"))
6060 then originalAsset(assetIdStr).name
6161 else "WAVES"))
6262 let desc = ("Puzzle Lend LP token. Derivative for the " + (if ((assetIdStr != "WAVES"))
6363 then originalAsset(assetIdStr).name
6464 else ("WAVES" + " token on the Waves blockchain.")))
6565 let pl = Issue(name, desc, 0, decimals, true, unit, 0)
6666 let plIdStr = getAssetString(calculateAssetId(pl))
67-[pl, StringEntry(((("setup_pl_" + assetIdStr) + "_") + poolDomain), plIdStr)]
67+[pl, StringEntry(((("setup_pl_" + assetIdStr) + "_") + poolDomain), plIdStr), StringEntry((("setup_" + plIdStr) + "_assetId"), assetIdStr)]
6868 }
6969
7070
7171
7272 @Callable(i)
7373 func exportPL (poolDomain,assetIdStr,amount) = {
7474 let poolAddress = addressFromStringValue(tryGetString(("setup_pool" + poolDomain)))
7575 let plAssetId = getAssetBytes(getStringValue(((("setup_pl_" + assetIdStr) + "_") + poolDomain)))
7676 let user = toString(i.caller)
7777 let userSupplyAmount = getIntegerValue(poolAddress, ((user + "_supplied_") + assetIdStr))
7878 let assetSRate = getIntegerValue(poolAddress, (assetIdStr + "_sRate"))
7979 let amountReal = fraction(amount, assetSRate, Scale16)
8080 let userCollateralAfter = invoke(poolAddress, "getUserCollateral", [false, user, true, ((assetIdStr + ",supplied,-") + toString(amountReal))], nil)
8181 if ((userCollateralAfter == userCollateralAfter))
8282 then {
8383 let userCollateralAfterVal = {
8484 let @ = userCollateralAfter
8585 if ($isInstanceOf(@, "Int"))
8686 then @
8787 else throw(($getType(@) + " couldn't be cast to Int"))
8888 }
8989 if ((amount > userSupplyAmount))
9090 then throw("not enough supplied balance")
9191 else if ((0 >= userCollateralAfterVal))
9292 then throw("transaction leads to a negative health")
9393 else {
9494 let plTotalAmount = match getInteger(poolAddress, ("PL_supplied_" + assetIdStr)) {
9595 case x: Int =>
9696 x
9797 case _ =>
9898 0
9999 }
100100 let upd1 = invoke(poolAddress, "updateParameter", [((user + "_supplied_") + assetIdStr), toString((userSupplyAmount - amount))], nil)
101101 if ((upd1 == upd1))
102102 then {
103103 let upd2 = invoke(poolAddress, "updateParameter", [("PL_supplied_" + assetIdStr), toString((plTotalAmount + amount))], nil)
104104 if ((upd2 == upd2))
105105 then [Reissue(value(plAssetId), amount, true), ScriptTransfer(i.caller, amount, plAssetId)]
106106 else throw("Strict value is not equal to itself.")
107107 }
108108 else throw("Strict value is not equal to itself.")
109109 }
110110 }
111111 else throw("Strict value is not equal to itself.")
112112 }
113113
114114
115115
116116 @Callable(i)
117117 func importPL (poolDomain,user) = {
118- let assetIdStr = getAssetString(i.payments[0].assetId)
118+ let plAssetId = i.payments[0].assetId
119+ let plIdStr = getAssetString(plAssetId)
119120 let amount = i.payments[0].amount
120121 let poolAddress = addressFromStringValue(tryGetString(("setup_pool" + poolDomain)))
121- let plAssetId = getAssetBytes(getStringValue(((("setup_pl_" + assetIdStr) + "_") + poolDomain)))
122+ let assetIdStr = tryGetString((("setup_" + plIdStr) + "_assetId"))
122123 let addressOK = match addressFromString(user) {
123124 case a: Address =>
124125 true
125126 case _ =>
126127 false
127128 }
128129 if (!(addressOK))
129130 then throw(("incorrect address " + user))
130131 else {
131132 let userSupplyAmount = match getInteger(poolAddress, ((user + "_supplied_+") + assetIdStr)) {
132133 case x: Int =>
133134 x
134135 case _ =>
135136 0
136137 }
137138 let plTotalAmount = match getInteger(poolAddress, ("PL_supplied_+" + assetIdStr)) {
138139 case x: Int =>
139140 x
140141 case _ =>
141142 0
142143 }
143144 let upd1 = invoke(poolAddress, "updateParameter", [((user + "_supplied_+") + assetIdStr), toString((userSupplyAmount + amount))], nil)
144145 if ((upd1 == upd1))
145146 then {
146147 let upd2 = invoke(poolAddress, "updateParameter", [("PL_supplied_+" + assetIdStr), toString((plTotalAmount - amount))], nil)
147148 if ((upd2 == upd2))
148149 then [Burn(value(plAssetId), amount)]
149150 else throw("Strict value is not equal to itself.")
150151 }
151152 else throw("Strict value is not equal to itself.")
152153 }
153154 }
154155
155156
156157
157158 @Callable(i)
158159 func initNewMaster (master) = {
159160 let addressOK = match addressFromString(master) {
160161 case a: Address =>
161162 true
162163 case _ =>
163164 false
164165 }
165166 if (!(addressOK))
166167 then throw(("incorrect address " + master))
167168 else if ((i.caller != this))
168169 then throw("available for self call only")
169170 else [StringEntry("verifier_master", master)]
170171 }
171172
172173
173174
174175 @Callable(i)
175176 func requestNewMaster (newMaster) = {
176177 let addressOK = match addressFromString(newMaster) {
177178 case a: Address =>
178179 true
179180 case _ =>
180181 false
181182 }
182183 if (!(addressOK))
183184 then throw(("incorrect address " + newMaster))
184185 else if ((indexOf(sentinels, i.caller) == unit))
185186 then throw("whitelist only")
186187 else [StringEntry("verifier_newMaster", newMaster), IntegerEntry("verifier_newMasterEligibleAfter", (height + 10000))]
187188 }
188189
189190
190191
191192 @Callable(i)
192193 func activateNewMaster () = {
193194 let eligibleHeight = getIntegerValue(this, "verifier_newMasterEligibleAfter")
194195 let newMaster = getStringValue(this, "verifier_newMaster")
195196 if ((indexOf(sentinels, i.caller) == unit))
196197 then throw("whitelist only")
197198 else if ((eligibleHeight > height))
198199 then throw("new master cannot be activated yet")
199200 else [DeleteEntry("verifier_newMaster"), DeleteEntry("verifier_newMasterEligibleAfter"), StringEntry("verifier_master", newMaster)]
200201 }
201202
202203
203204 @Verifier(tx)
204205 func verify () = {
205206 let masterAddress = getString("verifier_master")
206207 let approvedByMaster = match masterAddress {
207208 case x: String =>
208209 match getInteger(addressFromStringValue(x), ("approvedTx_" + toBase58String(tx.id))) {
209210 case y: Int =>
210211 y
211212 case _ =>
212213 0
213214 }
214215 case _ =>
215216 1
216217 }
217218 if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
218219 then (approvedByMaster > 0)
219220 else false
220221 }
221222

github/deemru/w8io/3ef1775 
39.44 ms