tx · 28oSGhZLidfZKWa3suio5RWaPkNqQtjnbett2Ktsu6ym

3Muf6P6CBEAYRhK1kca1dEN2nLJpiguckpn:  -0.01300000 Waves

2023.03.10 09:37 [2483619] smart account 3Muf6P6CBEAYRhK1kca1dEN2nLJpiguckpn > SELF 0.00000000 Waves

{ "type": 13, "id": "28oSGhZLidfZKWa3suio5RWaPkNqQtjnbett2Ktsu6ym", "fee": 1300000, "feeAssetId": null, "timestamp": 1678430285393, "version": 1, "sender": "3Muf6P6CBEAYRhK1kca1dEN2nLJpiguckpn", "senderPublicKey": "2iY1dqnzPts3eAeccTKCnRq5PuEFsdtbavcFQ4k8hoQ1", "proofs": [ "3VTLrAwdTdyFTCeacqzNkmp9bNh3VFGoCZBt1UF1snP1mLyfE2vzs6LcLVf8cBoUTL7BLDT2D6WakP3f1tG2LWfw" ], "script": "base64:BgIVCAISAwoBCBIAEgMKAQgSAwoBCBIAJAADU0VQAgJfXwAGc2NhbGU4AIDC1y8AEXBvb2xTdGF0c1ByaWNlS2V5AAQADmlkeFBvb2xBZGRyZXNzAAEADWlkeFBvb2xTdGF0dXMAAgAQaWR4UG9vbExQQXNzZXRJZAADAA1pZHhBbXRBc3NldElkAAQAD2lkeFByaWNlQXNzZXRJZAAFAA5pZHhBbXRBc3NldERjbQAGABBpZHhQcmljZUFzc2V0RGNtAAcADmlkeElBbXRBc3NldElkAAgAEGlkeElQcmljZUFzc2V0SWQACQANaWR4TFBBc3NldERjbQAKABNpZHhNYXRjaGVyUHVibGljS2V5AAsBDmtleVJlZ2lzdGVyUHV0Agtwb29sQWRkcmVzcwR0eElkCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX1BfXwULcG9vbEFkZHJlc3MCAl9fBQR0eElkARFrZXlSZWdpc3RlckludmVzdAILcG9vbEFkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgIQJXMlcyVzX19pbnZlc3RfXwULcG9vbEFkZHJlc3MCAl9fBQR0eElkARZrZXlQb29sVG90YWxBbXRCeUFzc2V0Agtwb29sQWRkcmVzcwdhc3NldElkCQCsAgIJAKwCAgkArAICAg8lcyVzJXNfX3RvdGFsX18FC3Bvb2xBZGRyZXNzAgJfXwUHYXNzZXRJZAESa2V5RmFjdG9yeUNvbnRyYWN0AAITJXNfX2ZhY3RvcnlDb250cmFjdAEga2V5U2xpcHBhZ2VBbXRQZXJBc3NldEN1bXVsYXRpdmUCC3Bvb2xBZGRyZXNzB2Fzc2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgIIJXMlcyVzX18FC3Bvb2xBZGRyZXNzAgJfXwUHYXNzZXRJZAIUX19zbGlwcGFnZUN1bXVsYXRpdmUBEGtleUZhY3RvcnlDb25maWcAAhElc19fZmFjdG9yeUNvbmZpZwEpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMBE3Bvb2xDb250cmFjdEFkZHJlc3MJAKwCAgkArAICAgglcyVzJXNfXwUTcG9vbENvbnRyYWN0QWRkcmVzcwIjX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MlBvb2xBc3NldHMBH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQBEWludGVybmFsQmFzZUFzc2V0CQCsAgICKCVzJXMlZF9fbWFwcGluZ3NfX2ludGVybmFsMmJhc2VBc3NldElkX18JAKQDAQURaW50ZXJuYWxCYXNlQXNzZXQBDWtleVBvb2xDb25maWcCCWlBbXRBc3NldAtpUHJpY2VBc3NldAkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUJaUFtdEFzc2V0AgJfXwULaVByaWNlQXNzZXQCCF9fY29uZmlnARNrZXlBbGxQb29sc1NodXRkb3duAAIMJXNfX3NodXRkb3duAQ1rZXlQb29sV2VpZ2h0AQ9jb250cmFjdEFkZHJlc3MJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQ9jb250cmFjdEFkZHJlc3MBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAD2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJARJrZXlGYWN0b3J5Q29udHJhY3QAAhVObyBGYWN0b3J5IEFjYyBmb3VuZC4BDmNvbnZlcnRBc3NldElkAQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUHYXNzZXRJZAIFV0FWRVMFB2Fzc2V0SWQBEWRhdGFQdXRBY3Rpb25JbmZvBAlpbkFzc2V0SWQKaW5Bc3NldEFtdAh0eEhlaWdodAt0eFRpbWVzdGFtcAkAuQkCCQDMCAICCCVzJWQlZCVkCQDMCAIFCWluQXNzZXRJZAkAzAgCCQCkAwEFCmluQXNzZXRBbXQJAMwIAgkApAMBBQh0eEhlaWdodAkAzAgCCQCkAwEFC3R4VGltZXN0YW1wBQNuaWwFA1NFUAEUZGF0YUludmVzdEFjdGlvbkluZm8EEW91dEFtb3VudEFzc2V0QW10EG91dFByaWNlQXNzZXRBbXQIdHhIZWlnaHQLdHhUaW1lc3RhbXAJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFEW91dEFtb3VudEFzc2V0QW10CQDMCAIJAKQDAQUQb3V0UHJpY2VBc3NldEFtdAkAzAgCCQCkAwEFCHR4SGVpZ2h0CQDMCAIJAKQDAQULdHhUaW1lc3RhbXAFA25pbAUDU0VQAQhhc1N0cmluZwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZ2YWxTdHIFByRtYXRjaDAFBnZhbFN0cgkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEHdG9TY2FsZQMDYW10CHJlc1NjYWxlCGN1clNjYWxlCQBrAwUDYW10BQhyZXNTY2FsZQUIY3VyU2NhbGUBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkEAnBkCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yBQFpAQtjb25zdHJ1Y3RvcgEPZmFjdG9yeUNvbnRyYWN0BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUZhY3RvcnlDb250cmFjdAAFD2ZhY3RvcnlDb250cmFjdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBA3B1dAAEBHBvb2wJAKUIAQgFAWkGY2FsbGVyBAtwbXRBbXRBc3NldAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABApwbXRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQgFC3BtdEFtdEFzc2V0B2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQtwbXRBbXRBc3NldAdhc3NldElkBAtwbXRBc3NldEFtdAgFC3BtdEFtdEFzc2V0BmFtb3VudAQKcG9vbEFzc2V0cwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMBBQRwb29sAg5JbnZhbGlkIGNhbGxlcgUDU0VQBA1hbW91bnRBc3NldElkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbEFzc2V0cwABBAxwcmljZUFzc2V0SWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpwb29sQXNzZXRzAAIEC2Ftb3VudEFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAEFDWFtb3VudEFzc2V0SWQCEUNhbm5vdCBmaW5kIGFzc2V0BApwcmljZUFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAEFDHByaWNlQXNzZXRJZAIRQ2Fubm90IGZpbmQgYXNzZXQECHRvdGFsQW10CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZrZXlQb29sVG90YWxBbXRCeUFzc2V0AgUEcG9vbAUKcG10QXNzZXRJZAAABBVjdW11bGF0aXZlU2xpcHBhZ2VBbXQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBIGtleVNsaXBwYWdlQW10UGVyQXNzZXRDdW11bGF0aXZlAgUEcG9vbAUKcG10QXNzZXRJZAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZWdpc3RlclB1dAIFBHBvb2wJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkBEWRhdGFQdXRBY3Rpb25JbmZvBAUKcG10QXNzZXRJZAULcG10QXNzZXRBbXQFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlQb29sVG90YWxBbXRCeUFzc2V0AgUEcG9vbAUKcG10QXNzZXRJZAkAZAIFCHRvdGFsQW10BQtwbXRBc3NldEFtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBIGtleVNsaXBwYWdlQW10UGVyQXNzZXRDdW11bGF0aXZlAgUEcG9vbAUKcG10QXNzZXRJZAkAZAIFFWN1bXVsYXRpdmVTbGlwcGFnZUFtdAULcG10QXNzZXRBbXQFA25pbAFpAQZpbnZlc3QBDnBvb2xBZGRyZXNzU3RyBAtwb29sQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFDnBvb2xBZGRyZXNzU3RyAhRpbnZhbGlkIHBvb2wgYWRkcmVzcwQKcG9vbEFzc2V0cwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMBBQ5wb29sQWRkcmVzc1N0cgIUSW52YWxpZCBwb29sIHBhc3NlZC4FA1NFUAQEYW1JZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD2ZhY3RvcnlDb250cmFjdAkBH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbEFzc2V0cwABAhZObyBhc3NldCBtYXBwaW5nIGZvdW5kBARwcklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPZmFjdG9yeUNvbnRyYWN0CQEfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpwb29sQXNzZXRzAAICFk5vIGFzc2V0IG1hcHBpbmcgZm91bmQECWFtQmFsYW5jZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWa2V5UG9vbFRvdGFsQW10QnlBc3NldAIFDnBvb2xBZGRyZXNzU3RyBQRhbUlkAAAECXByQmFsYW5jZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWa2V5UG9vbFRvdGFsQW10QnlBc3NldAIFDnBvb2xBZGRyZXNzU3RyBQRwcklkAAAEDWVzdEJ5UHJSZXN1bHQJAPwHBAULcG9vbEFkZHJlc3MCH2V2YWx1YXRlUHV0QnlQcmljZUFzc2V0UkVBRE9OTFkJAMwIAgUJcHJCYWxhbmNlBQNuaWwFA25pbAQNZXN0QnlBbVJlc3VsdAkA/AcEBQtwb29sQWRkcmVzcwIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUJYW1CYWxhbmNlBQNuaWwFA25pbAQOSWR4RXN0QW1BbW91bnQABwQOSWR4RXN0UHJBbW91bnQACAQIZXN0QW1BbXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkBCGFzU3RyaW5nAQUNZXN0QnlQclJlc3VsdAUDU0VQBQ5JZHhFc3RBbUFtb3VudAImZmFpbCB0byBwYXJzZSBlc3RpbWF0ZWQgYW1Bc3NldCBhbW91bnQECGVzdFByQW10CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAQhhc1N0cmluZwEFDWVzdEJ5QW1SZXN1bHQFA1NFUAUOSWR4RXN0UHJBbW91bnQCJmZhaWwgdG8gcGFyc2UgZXN0aW1hdGVkIHByQXNzZXQgYW1vdW50BAskdDA2NzgzNjg4NAMJAGcCBQlhbUJhbGFuY2UFCGVzdEFtQW10CQCUCgIFCGVzdEFtQW10BQlwckJhbGFuY2UJAJQKAgUJYW1CYWxhbmNlBQhlc3RQckFtdAQFYW1BbXQIBQskdDA2NzgzNjg4NAJfMQQFcHJBbXQIBQskdDA2NzgzNjg4NAJfMgQJYW1Bc3NldElkAwkAAAIFBGFtSWQCBVdBVkVTBQR1bml0CQDZBAEFBGFtSWQECXByQXNzZXRJZAMJAAACBQRwcklkAgVXQVZFUwUEdW5pdAkA2QQBBQRwcklkBAVscFB1dAkA/AcEBQtwb29sQWRkcmVzcwIKcHV0Rm9yRnJlZQkAzAgCAOgHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWFtQXNzZXRJZAUFYW1BbXQJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCXByQXNzZXRJZAUFcHJBbXQFA25pbAMJAAACBQVscFB1dAUFbHBQdXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlZ2lzdGVySW52ZXN0AgUOcG9vbEFkZHJlc3NTdHIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkBFGRhdGFJbnZlc3RBY3Rpb25JbmZvBAUFYW1BbXQFBXByQW10BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5UG9vbFRvdGFsQW10QnlBc3NldAIFDnBvb2xBZGRyZXNzU3RyBQRhbUlkCQBlAgUJYW1CYWxhbmNlBQVhbUFtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVBvb2xUb3RhbEFtdEJ5QXNzZXQCBQ5wb29sQWRkcmVzc1N0cgUEcHJJZAkAZQIFCXByQmFsYW5jZQUFcHJBbXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAnBtCQEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAVoYXNQTQMJAQlpc0RlZmluZWQBBQJwbQYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFB2NoZWNrUE0FB2NoZWNrUE0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleU1hbmFnZXJQdWJsaWNLZXkACQDYBAEJAQV2YWx1ZQEFAnBtCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleQXFtcg=", "chainId": 84, "height": 2483619, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4Hgmq5WiCnFDEry9mFDZKtU46753cDswN7UM57RuJKYD Next: BNpesGXWVXTQM2u8M4FYqZBTMNw44CBvWLymu317iCNY Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let scale8 = 100000000
77
88 let poolStatsPriceKey = 4
99
1010 let idxPoolAddress = 1
1111
1212 let idxPoolStatus = 2
1313
1414 let idxPoolLPAssetId = 3
1515
1616 let idxAmtAssetId = 4
1717
1818 let idxPriceAssetId = 5
1919
2020 let idxAmtAssetDcm = 6
2121
2222 let idxPriceAssetDcm = 7
2323
2424 let idxIAmtAssetId = 8
2525
2626 let idxIPriceAssetId = 9
2727
2828 let idxLPAssetDcm = 10
2929
3030 let idxMatcherPublicKey = 11
3131
3232 func keyRegisterPut (poolAddress,txId) = ((("%s%s%s__P__" + poolAddress) + "__") + txId)
3333
3434
3535 func keyRegisterInvest (poolAddress,txId) = ((("%s%s%s__invest__" + poolAddress) + "__") + txId)
3636
3737
3838 func keyPoolTotalAmtByAsset (poolAddress,assetId) = ((("%s%s%s__total__" + poolAddress) + "__") + assetId)
3939
4040
4141 func keyFactoryContract () = "%s__factoryContract"
4242
4343
4444 func keySlippageAmtPerAssetCumulative (poolAddress,assetId) = (((("%s%s%s__" + poolAddress) + "__") + assetId) + "__slippageCumulative")
4545
4646
4747 func keyFactoryConfig () = "%s__factoryConfig"
4848
4949
5050 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
5151
5252
5353 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
5454
5555
5656 func keyPoolConfig (iAmtAsset,iPriceAsset) = (((("%d%d%s__" + iAmtAsset) + "__") + iPriceAsset) + "__config")
5757
5858
5959 func keyAllPoolsShutdown () = "%s__shutdown"
6060
6161
6262 func keyPoolWeight (contractAddress) = ("%s%s__poolWeight__" + contractAddress)
6363
6464
6565 func keyManagerPublicKey () = "%s__managerPublicKey"
6666
6767
6868 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
6969
7070
7171 let factoryContract = addressFromStringValue(valueOrErrorMessage(getString(this, keyFactoryContract()), "No Factory Acc found."))
7272
7373 func convertAssetId (assetId) = if (!(isDefined(assetId)))
7474 then "WAVES"
7575 else assetId
7676
7777
7878 func dataPutActionInfo (inAssetId,inAssetAmt,txHeight,txTimestamp) = makeString(["%s%d%d%d", inAssetId, toString(inAssetAmt), toString(txHeight), toString(txTimestamp)], SEP)
7979
8080
8181 func dataInvestActionInfo (outAmountAssetAmt,outPriceAssetAmt,txHeight,txTimestamp) = makeString(["%d%d%d%d", toString(outAmountAssetAmt), toString(outPriceAssetAmt), toString(txHeight), toString(txTimestamp)], SEP)
8282
8383
8484 func asString (val) = match val {
8585 case valStr: String =>
8686 valStr
8787 case _ =>
8888 throw("fail to cast into String")
8989 }
9090
9191
9292 func toScale (amt,resScale,curScale) = fraction(amt, resScale, curScale)
9393
9494
9595 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
9696 case s: String =>
9797 fromBase58String(s)
9898 case _: Unit =>
9999 unit
100100 case _ =>
101101 throw("Match error")
102102 }
103103
104104
105105 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
106106 case s: String =>
107107 fromBase58String(s)
108108 case _: Unit =>
109109 unit
110110 case _ =>
111111 throw("Match error")
112112 }
113113
114114
115115 func mustManager (i) = {
116116 let pd = throw("Permission denied")
117117 match managerPublicKeyOrUnit() {
118118 case pk: ByteVector =>
119119 if ((i.callerPublicKey == pk))
120120 then true
121121 else pd
122122 case _: Unit =>
123123 if ((i.caller == this))
124124 then true
125125 else pd
126126 case _ =>
127127 throw("Match error")
128128 }
129129 }
130130
131131
132132 @Callable(i)
133133 func constructor (factoryContract) = {
134134 let checkCaller = mustManager(i)
135135 if ((checkCaller == checkCaller))
136136 then [StringEntry(keyFactoryContract(), factoryContract)]
137137 else throw("Strict value is not equal to itself.")
138138 }
139139
140140
141141
142142 @Callable(i)
143143 func put () = {
144144 let pool = toString(i.caller)
145145 let pmtAmtAsset = value(i.payments[0])
146146 let pmtAssetId = if (!(isDefined(pmtAmtAsset.assetId)))
147147 then "WAVES"
148148 else toBase58String(value(pmtAmtAsset.assetId))
149149 let pmtAssetAmt = pmtAmtAsset.amount
150150 let poolAssets = split(valueOrErrorMessage(getString(factoryContract, keyMappingPoolContractAddressToPoolAssets(pool)), "Invalid caller"), SEP)
151151 let amountAssetId = parseIntValue(poolAssets[1])
152152 let priceAssetId = parseIntValue(poolAssets[2])
153153 let amountAsset = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(amountAssetId)), "Cannot find asset")
154154 let priceAsset = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(priceAssetId)), "Cannot find asset")
155155 let totalAmt = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(pool, pmtAssetId)), 0)
156156 let cumulativeSlippageAmt = valueOrElse(getInteger(this, keySlippageAmtPerAssetCumulative(pool, pmtAssetId)), 0)
157157 [StringEntry(keyRegisterPut(pool, toBase58String(i.transactionId)), dataPutActionInfo(pmtAssetId, pmtAssetAmt, height, lastBlock.timestamp)), IntegerEntry(keyPoolTotalAmtByAsset(pool, pmtAssetId), (totalAmt + pmtAssetAmt)), IntegerEntry(keySlippageAmtPerAssetCumulative(pool, pmtAssetId), (cumulativeSlippageAmt + pmtAssetAmt))]
158158 }
159159
160160
161161
162162 @Callable(i)
163163 func invest (poolAddressStr) = {
164164 let poolAddress = valueOrErrorMessage(addressFromString(poolAddressStr), "invalid pool address")
165165 let poolAssets = split(valueOrErrorMessage(getString(factoryContract, keyMappingPoolContractAddressToPoolAssets(poolAddressStr)), "Invalid pool passed."), SEP)
166166 let amId = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(parseIntValue(poolAssets[1]))), "No asset mapping found")
167167 let prId = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(parseIntValue(poolAssets[2]))), "No asset mapping found")
168168 let amBalance = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(poolAddressStr, amId)), 0)
169169 let prBalance = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(poolAddressStr, prId)), 0)
170170 let estByPrResult = invoke(poolAddress, "evaluatePutByPriceAssetREADONLY", [prBalance], nil)
171171 let estByAmResult = invoke(poolAddress, "evaluatePutByAmountAssetREADONLY", [amBalance], nil)
172172 let IdxEstAmAmount = 7
173173 let IdxEstPrAmount = 8
174174 let estAmAmt = valueOrErrorMessage(parseIntValue(split(asString(estByPrResult), SEP)[IdxEstAmAmount]), "fail to parse estimated amAsset amount")
175175 let estPrAmt = valueOrErrorMessage(parseIntValue(split(asString(estByAmResult), SEP)[IdxEstPrAmount]), "fail to parse estimated prAsset amount")
176176 let $t067836884 = if ((amBalance >= estAmAmt))
177177 then $Tuple2(estAmAmt, prBalance)
178178 else $Tuple2(amBalance, estPrAmt)
179179 let amAmt = $t067836884._1
180180 let prAmt = $t067836884._2
181181 let amAssetId = if ((amId == "WAVES"))
182182 then unit
183183 else fromBase58String(amId)
184184 let prAssetId = if ((prId == "WAVES"))
185185 then unit
186186 else fromBase58String(prId)
187187 let lpPut = invoke(poolAddress, "putForFree", [1000], [AttachedPayment(amAssetId, amAmt), AttachedPayment(prAssetId, prAmt)])
188188 if ((lpPut == lpPut))
189189 then [StringEntry(keyRegisterInvest(poolAddressStr, toBase58String(i.transactionId)), dataInvestActionInfo(amAmt, prAmt, height, lastBlock.timestamp)), IntegerEntry(keyPoolTotalAmtByAsset(poolAddressStr, amId), (amBalance - amAmt)), IntegerEntry(keyPoolTotalAmtByAsset(poolAddressStr, prId), (prBalance - prAmt))]
190190 else throw("Strict value is not equal to itself.")
191191 }
192192
193193
194194
195195 @Callable(i)
196196 func setManager (pendingManagerPublicKey) = {
197197 let checkCaller = mustManager(i)
198198 if ((checkCaller == checkCaller))
199199 then {
200200 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
201201 if ((checkManagerPublicKey == checkManagerPublicKey))
202202 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
203203 else throw("Strict value is not equal to itself.")
204204 }
205205 else throw("Strict value is not equal to itself.")
206206 }
207207
208208
209209
210210 @Callable(i)
211211 func confirmManager () = {
212212 let pm = pendingManagerPublicKeyOrUnit()
213213 let hasPM = if (isDefined(pm))
214214 then true
215215 else throw("No pending manager")
216216 if ((hasPM == hasPM))
217217 then {
218218 let checkPM = if ((i.callerPublicKey == value(pm)))
219219 then true
220220 else throw("You are not pending manager")
221221 if ((checkPM == checkPM))
222222 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
223223 else throw("Strict value is not equal to itself.")
224224 }
225225 else throw("Strict value is not equal to itself.")
226226 }
227227
228228
229229 @Verifier(tx)
230230 func verify () = {
231231 let targetPublicKey = match managerPublicKeyOrUnit() {
232232 case pk: ByteVector =>
233233 pk
234234 case _: Unit =>
235235 tx.senderPublicKey
236236 case _ =>
237237 throw("Match error")
238238 }
239239 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
240240 }
241241

github/deemru/w8io/169f3d6 
33.02 ms