tx · 7zoigKNpgR81ZhNZoqPtu4AUtrP4y4VoGP85qgPjn8Wi

3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M:  -0.03700000 Waves

2022.09.21 12:24 [2238712] smart account 3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M > SELF 0.00000000 Waves

{ "type": 13, "id": "7zoigKNpgR81ZhNZoqPtu4AUtrP4y4VoGP85qgPjn8Wi", "fee": 3700000, "feeAssetId": null, "timestamp": 1663752373321, "version": 2, "chainId": 84, "sender": "3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M", "senderPublicKey": "6PjNBLx8VTTNLWTS5y6zecyVfYCUC9ZCrAULFnLQU4XM", "proofs": [ "24GbAc1b7kvr4CQxQpoDtwg1wj3m68HApR9mJtw8D7i6h2FuRdnvMDJwkVbUQGdbQ6Jo3KmxHfRFV4iRe44mH2gq" ], "script": "base64:BgIXCAISABIECgIICBIDCgEIEgASBAoCCAEzABBrX3JlZl9saW5rX293bmVyAhBrX3JlZl9saW5rX293bmVyABZrX3JlZl9saW5rX293bmVyX2NvdW50AhZrX3JlZl9saW5rX293bmVyX2NvdW50ABBrX3JlZl9vd25lcl9saW5rAhBrX3JlZl9vd25lcl9saW5rAAprX3JlZmVycmVyAgprX3JlZmVycmVyAAhrX2FjdGl2ZQIIa19hY3RpdmUADGtfZGVmYXVsdEZlZQIMa19kZWZhdWx0RmVlABRrX3JlZmVycmVyX3JlZl9jb3VudAIUa19yZWZlcnJlcl9yZWZfY291bnQAEWtfcmVmZXJyZXJfZWFybmVkAhFrX3JlZmVycmVyX2Vhcm5lZAASa19yZWZlcnJlcl9jbGFpbWVkAhJrX3JlZmVycmVyX2NsYWltZWQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkABWtfYW1tAgVrX2FtbQEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwESZ2V0UmVmZXJyZXJMaW5rS2V5AQVfbGluawkArAICCQCsAgIFEGtfcmVmX2xpbmtfb3duZXICAV8FBV9saW5rAQ5nZXRSZWZlcnJlcktleQEHX3RyYWRlcgkArAICCQCsAgIFCmtfcmVmZXJyZXICAV8FB190cmFkZXIBFmdldFJlZmVycmVyUmVmQ291bnRLZXkBCV9yZWZlcnJlcgkArAICCQCsAgIFFGtfcmVmZXJyZXJfcmVmX2NvdW50AgFfBQlfcmVmZXJyZXIBF2dldFJlZmVycmVyTGlua0NvdW50S2V5AQlfcmVmZXJyZXIJAKwCAgkArAICBRZrX3JlZl9saW5rX293bmVyX2NvdW50AgFfBQlfcmVmZXJyZXIBFGdldFJlZmVycmVyTGlua0tleUF0AglfcmVmZXJyZXIHX2xpbmtJZAkArAICCQCsAgIJAKwCAgkArAICBRBrX3JlZl9vd25lcl9saW5rAgFfBQlfcmVmZXJyZXICAV8JAKQDAQUHX2xpbmtJZAEUZ2V0UmVmZXJyZXJFYXJuZWRLZXkBCV9yZWZlcnJlcgkArAICCQCsAgIFEWtfcmVmZXJyZXJfZWFybmVkAgFfBQlfcmVmZXJyZXIBFWdldFJlZmVycmVyQ2xhaW1lZEtleQEJX3JlZmVycmVyCQCsAgIJAKwCAgUSa19yZWZlcnJlcl9jbGFpbWVkAgFfBQlfcmVmZXJyZXIBDGdldEFjdGl2ZUtleQEHX3RyYWRlcgkArAICCQCsAgIFCGtfYWN0aXZlAgFfBQdfdHJhZGVyAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEPZ292ZXJuYW5jZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2dvdmVybmFuY2VfYXNzZXQBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBC2lzV2hpdGVsaXN0AQhfYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmwgCCQELY29vcmRpbmF0b3IACQEOdG9Db21wb3NpdGVLZXkCBQVrX2FtbQUIX2FkZHJlc3MHAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAIRFVSQVRJT04JAGgCCQBoAgA8ADwAGAAKTk9fQUREUkVTUwIAAAlOT19TVEFLRVIAAAEQdXNkbkZyb21EZWNpbWFscwEHX2Ftb3VudAkAaQIFB19hbW91bnQAZAEOdXNkblRvRGVjaW1hbHMBB19hbW91bnQJAGgCBQdfYW1vdW50AGQBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEbWludgICX3gCX3kDCQBmAgUCX3gFAl95BQJfeQUCX3gBA2ludAEBawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFAWsJAKwCAgINbm8gdmFsdWUgZm9yIAUBawEEaW50MAEBawkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrAAABC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEPZ2V0TGlua1JlZmVycmVyAQVfbGluawkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQESZ2V0UmVmZXJyZXJMaW5rS2V5AQUFX2xpbmsCAAELZ2V0UmVmZXJyZXIBB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmdldFJlZmVycmVyS2V5AQUHX3RyYWRlcgIAAQppc1JlZmVycmFsAQdfdHJhZGVyCQECIT0CCQELZ2V0UmVmZXJyZXIBBQdfdHJhZGVyAgABC2lzRmlyc3RUaW1lAQdfdHJhZGVyCQAAAgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgcHAQ1nZXREZWZhdWx0RmVlAAkBA2ludAEFDGtfZGVmYXVsdEZlZQETZ2V0UmVmZXJyZXJSZWZDb3VudAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQUJX3JlZmVycmVyAAABFGdldFJlZmVycmVyTGlua0NvdW50AQlfcmVmZXJyZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBF2dldFJlZmVycmVyTGlua0NvdW50S2V5AQUJX3JlZmVycmVyAAABEWdldFJlZmVycmVyRWFybmVkAQlfcmVmZXJyZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFGdldFJlZmVycmVyRWFybmVkS2V5AQUJX3JlZmVycmVyAAABEmdldFJlZmVycmVyQ2xhaW1lZAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARVnZXRSZWZlcnJlckNsYWltZWRLZXkBBQlfcmVmZXJyZXIAAAUBaQESY3JlYXRlUmVmZXJyYWxMaW5rAAQDcmF3CQCsAgIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEBWJ5dGVzCQCbAwEFA3JhdwQEbG9uZwkA2AQBCQD3AwEFBWJ5dGVzBAVzaG9ydAkArwICBQRsb25nAAoEA2tleQkBEmdldFJlZmVycmVyTGlua0tleQEFBXNob3J0BAZsaW5rSWQJAGQCCQEUZ2V0UmVmZXJyZXJMaW5rQ291bnQBCQClCAEIBQFpBmNhbGxlcgABAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQACAQIqU2hvcnQgbGluayBleGlzdHMsIHRyeSBnZW5lcmF0aW5nIGl0IGFnYWluCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRnZXRSZWZlcnJlckxpbmtLZXlBdAIJAKUIAQgFAWkGY2FsbGVyBQZsaW5rSWQFBXNob3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQkApQgBCAUBaQZjYWxsZXIFA25pbAFpARVhY2NlcHRQYXltZW50V2l0aExpbmsCB190cmFkZXIIX3JlZkxpbmsEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANhbW0JAKUIAQgFAWkGY2FsbGVyAwMJAQEhAQkBC2lzV2hpdGVsaXN0AQUDYW1tBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIkSW52YWxpZCBhY2NlcHRQYXltZW50V2l0aExpbmsgcGFyYW1zBAtfaXNSZWZlcnJhbAkBCmlzUmVmZXJyYWwBBQdfdHJhZGVyBAxfaXNGaXJzdFRpbWUJAQtpc0ZpcnN0VGltZQEFB190cmFkZXIDAwkBCmlzUmVmZXJyYWwBBQdfdHJhZGVyBgkBC2lzRmlyc3RUaW1lAQUHX3RyYWRlcgMFC19pc1JlZmVycmFsBAhyZWZlcnJlcgkBC2dldFJlZmVycmVyAQUHX3RyYWRlcgQDZmVlCQENZ2V0RGVmYXVsdEZlZQAEEGFtb3VudFRvUmVmZXJyZXIJAQRtdWxkAgUHX2Ftb3VudAUDZmVlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFEGFtb3VudFRvUmVmZXJyZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFEGFtb3VudFRvUmVmZXJyZXIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsBRBhbW91bnRUb1JlZmVycmVyBAhyZWZlcnJlcgkBD2dldExpbmtSZWZlcnJlcgEFCF9yZWZMaW5rAwkAAAIFCHJlZmVycmVyAgAJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQxnZXRBY3RpdmVLZXkBBQdfdHJhZGVyBgUDbmlsAAAEA2ZlZQkBDWdldERlZmF1bHRGZWUABBBhbW91bnRUb1JlZmVycmVyCQEEbXVsZAIFB19hbW91bnQFA2ZlZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWZ2V0UmVmZXJyZXJSZWZDb3VudEtleQEFCHJlZmVycmVyCQBkAgkBE2dldFJlZmVycmVyUmVmQ291bnQBBQhyZWZlcnJlcgABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUZ2V0UmVmZXJyZXJFYXJuZWRLZXkBBQhyZWZlcnJlcgkAZAIJARFnZXRSZWZlcnJlckVhcm5lZAEFCHJlZmVycmVyBRBhbW91bnRUb1JlZmVycmVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5nZXRSZWZlcnJlcktleQEFB190cmFkZXIFCHJlZmVycmVyCQDMCAIJAQxCb29sZWFuRW50cnkCCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFEGFtb3VudFRvUmVmZXJyZXIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsBRBhbW91bnRUb1JlZmVycmVyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwAAAFpAQ1hY2NlcHRQYXltZW50AQdfdHJhZGVyBAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQDYW1tCQClCAEIBQFpBmNhbGxlcgMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECHEludmFsaWQgYWNjZXB0UGF5bWVudCBwYXJhbXMEC19pc1JlZmVycmFsCQEKaXNSZWZlcnJhbAEFB190cmFkZXIDBQtfaXNSZWZlcnJhbAQIcmVmZXJyZXIJAQtnZXRSZWZlcnJlcgEFB190cmFkZXIEA2ZlZQkBDWdldERlZmF1bHRGZWUABBBhbW91bnRUb1JlZmVycmVyCQEEbXVsZAIFB19hbW91bnQFA2ZlZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUZ2V0UmVmZXJyZXJFYXJuZWRLZXkBBQhyZWZlcnJlcgkAZAIJARFnZXRSZWZlcnJlckVhcm5lZAEFCHJlZmVycmVyBRBhbW91bnRUb1JlZmVycmVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRBhbW91bnRUb1JlZmVycmVyCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAUQYW1vdW50VG9SZWZlcnJlcgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAAABaQEMY2xhaW1SZXdhcmRzAAQIcmVmZXJyZXIJAKUIAQgFAWkGY2FsbGVyBAx0b3RhbFJld2FyZHMJARFnZXRSZWZlcnJlckVhcm5lZAEFCHJlZmVycmVyBAx0b3RhbENsYWltZWQJARJnZXRSZWZlcnJlckNsYWltZWQBBQhyZWZlcnJlcgQHdG9DbGFpbQkAZQIFDHRvdGFsUmV3YXJkcwUMdG90YWxDbGFpbWVkAwkAZgIFB3RvQ2xhaW0AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWdldFJlZmVycmVyQ2xhaW1lZEtleQEFCHJlZmVycmVyCQBkAgkBEmdldFJlZmVycmVyQ2xhaW1lZAEFCHJlZmVycmVyBQd0b0NsYWltCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9DbGFpbQkBCnF1b3RlQXNzZXQABQNuaWwJAAIBAhBOb3RoaW5nIHRvIGNsYWltAWkBCmluaXRpYWxpemUCDF9jb29yZGluYXRvcgtfZGVmYXVsdEZlZQMJAQtpbml0aWFsaXplZAAJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtfZGVmYXVsdEZlZQULX2RlZmF1bHRGZWUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAdS+48A==", "height": 2238712, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Bp2ucuWSx5Ze19CY2ywZaTwHNPqkVophepFgRi9X2gTU Next: 4rj3raxFbSJnq3Va31d43cCz7gCc1VaMk6rb2BRWyv6S Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_ref_link_owner = "k_ref_link_owner"
5+
6+let k_ref_link_owner_count = "k_ref_link_owner_count"
7+
8+let k_ref_owner_link = "k_ref_owner_link"
59
610 let k_referrer = "k_referrer"
711
3741
3842
3943 func getReferrerRefCountKey (_referrer) = ((k_referrer_ref_count + "_") + _referrer)
44+
45+
46+func getReferrerLinkCountKey (_referrer) = ((k_ref_link_owner_count + "_") + _referrer)
47+
48+
49+func getReferrerLinkKeyAt (_referrer,_linkId) = ((((k_ref_owner_link + "_") + _referrer) + "_") + toString(_linkId))
4050
4151
4252 func getReferrerEarnedKey (_referrer) = ((k_referrer_earned + "_") + _referrer)
120130 func getReferrerRefCount (_referrer) = valueOrElse(getInteger(this, getReferrerRefCountKey(_referrer)), 0)
121131
122132
133+func getReferrerLinkCount (_referrer) = valueOrElse(getInteger(this, getReferrerLinkCountKey(_referrer)), 0)
134+
135+
123136 func getReferrerEarned (_referrer) = valueOrElse(getInteger(this, getReferrerEarnedKey(_referrer)), 0)
124137
125138
133146 let long = toBase58String(sha256(bytes))
134147 let short = take(long, 10)
135148 let key = getReferrerLinkKey(short)
149+ let linkId = (getReferrerLinkCount(toString(i.caller)) + 1)
136150 if (isDefined(getString(this, key)))
137151 then throw("Short link exists, try generating it again")
138- else [StringEntry(key, toString(i.caller))]
152+ else [StringEntry(getReferrerLinkKeyAt(toString(i.caller), linkId), short), StringEntry(key, toString(i.caller))]
139153 }
140154
141155
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_ref_link_owner = "k_ref_link_owner"
5+
6+let k_ref_link_owner_count = "k_ref_link_owner_count"
7+
8+let k_ref_owner_link = "k_ref_owner_link"
59
610 let k_referrer = "k_referrer"
711
812 let k_active = "k_active"
913
1014 let k_defaultFee = "k_defaultFee"
1115
1216 let k_referrer_ref_count = "k_referrer_ref_count"
1317
1418 let k_referrer_earned = "k_referrer_earned"
1519
1620 let k_referrer_claimed = "k_referrer_claimed"
1721
1822 let k_initialized = "k_initialized"
1923
2024 let k_coordinatorAddress = "k_coordinatorAddress"
2125
2226 let k_governance_asset = "k_gov_asset"
2327
2428 let k_quote_asset = "k_quote_asset"
2529
2630 let k_admin_public_key = "k_admin_public_key"
2731
2832 let k_amm = "k_amm"
2933
3034 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
3135
3236
3337 func getReferrerLinkKey (_link) = ((k_ref_link_owner + "_") + _link)
3438
3539
3640 func getReferrerKey (_trader) = ((k_referrer + "_") + _trader)
3741
3842
3943 func getReferrerRefCountKey (_referrer) = ((k_referrer_ref_count + "_") + _referrer)
44+
45+
46+func getReferrerLinkCountKey (_referrer) = ((k_ref_link_owner_count + "_") + _referrer)
47+
48+
49+func getReferrerLinkKeyAt (_referrer,_linkId) = ((((k_ref_owner_link + "_") + _referrer) + "_") + toString(_linkId))
4050
4151
4252 func getReferrerEarnedKey (_referrer) = ((k_referrer_earned + "_") + _referrer)
4353
4454
4555 func getReferrerClaimedKey (_referrer) = ((k_referrer_claimed + "_") + _referrer)
4656
4757
4858 func getActiveKey (_trader) = ((k_active + "_") + _trader)
4959
5060
5161 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
5262
5363
5464 func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
5565
5666
5767 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
5868
5969
6070 func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
6171
6272
6373 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
6474
6575
6676 let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
6777
6878 let DURATION = ((60 * 60) * 24)
6979
7080 let NO_ADDRESS = ""
7181
7282 let NO_STAKER = 0
7383
7484 func usdnFromDecimals (_amount) = (_amount / 100)
7585
7686
7787 func usdnToDecimals (_amount) = (_amount * 100)
7888
7989
8090 func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
8191
8292
8393 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
8494
8595
8696 func abs (_x) = if ((_x > 0))
8797 then _x
8898 else -(_x)
8999
90100
91101 func minv (_x,_y) = if ((_x > _y))
92102 then _y
93103 else _x
94104
95105
96106 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
97107
98108
99109 func int0 (k) = valueOrElse(getInteger(this, k), 0)
100110
101111
102112 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
103113
104114
105115 func getLinkReferrer (_link) = valueOrElse(getString(this, getReferrerLinkKey(_link)), "")
106116
107117
108118 func getReferrer (_trader) = valueOrElse(getString(this, getReferrerKey(_trader)), "")
109119
110120
111121 func isReferral (_trader) = (getReferrer(_trader) != "")
112122
113123
114124 func isFirstTime (_trader) = (valueOrElse(getBoolean(this, getActiveKey(_trader)), false) == false)
115125
116126
117127 func getDefaultFee () = int(k_defaultFee)
118128
119129
120130 func getReferrerRefCount (_referrer) = valueOrElse(getInteger(this, getReferrerRefCountKey(_referrer)), 0)
121131
122132
133+func getReferrerLinkCount (_referrer) = valueOrElse(getInteger(this, getReferrerLinkCountKey(_referrer)), 0)
134+
135+
123136 func getReferrerEarned (_referrer) = valueOrElse(getInteger(this, getReferrerEarnedKey(_referrer)), 0)
124137
125138
126139 func getReferrerClaimed (_referrer) = valueOrElse(getInteger(this, getReferrerClaimedKey(_referrer)), 0)
127140
128141
129142 @Callable(i)
130143 func createReferralLink () = {
131144 let raw = (toBase58String(i.transactionId) + toBase58String(i.callerPublicKey))
132145 let bytes = toBytes(raw)
133146 let long = toBase58String(sha256(bytes))
134147 let short = take(long, 10)
135148 let key = getReferrerLinkKey(short)
149+ let linkId = (getReferrerLinkCount(toString(i.caller)) + 1)
136150 if (isDefined(getString(this, key)))
137151 then throw("Short link exists, try generating it again")
138- else [StringEntry(key, toString(i.caller))]
152+ else [StringEntry(getReferrerLinkKeyAt(toString(i.caller), linkId), short), StringEntry(key, toString(i.caller))]
139153 }
140154
141155
142156
143157 @Callable(i)
144158 func acceptPaymentWithLink (_trader,_refLink) = {
145159 let _amount = i.payments[0].amount
146160 let amm = toString(i.caller)
147161 if (if (!(isWhitelist(amm)))
148162 then true
149163 else !(initialized()))
150164 then throw("Invalid acceptPaymentWithLink params")
151165 else {
152166 let _isReferral = isReferral(_trader)
153167 let _isFirstTime = isFirstTime(_trader)
154168 if (if (isReferral(_trader))
155169 then true
156170 else isFirstTime(_trader))
157171 then if (_isReferral)
158172 then {
159173 let referrer = getReferrer(_trader)
160174 let fee = getDefaultFee()
161175 let amountToReferrer = muld(_amount, fee)
162176 $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
163177 }
164178 else {
165179 let referrer = getLinkReferrer(_refLink)
166180 if ((referrer == ""))
167181 then $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId), BooleanEntry(getActiveKey(_trader), true)], 0)
168182 else {
169183 let fee = getDefaultFee()
170184 let amountToReferrer = muld(_amount, fee)
171185 $Tuple2([IntegerEntry(getReferrerRefCountKey(referrer), (getReferrerRefCount(referrer) + 1)), IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountToReferrer)), StringEntry(getReferrerKey(_trader), referrer), BooleanEntry(getActiveKey(_trader), true), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
172186 }
173187 }
174188 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
175189 }
176190 }
177191
178192
179193
180194 @Callable(i)
181195 func acceptPayment (_trader) = {
182196 let _amount = i.payments[0].amount
183197 let amm = toString(i.caller)
184198 if (if (!(isWhitelist(amm)))
185199 then true
186200 else !(initialized()))
187201 then throw("Invalid acceptPayment params")
188202 else {
189203 let _isReferral = isReferral(_trader)
190204 if (_isReferral)
191205 then {
192206 let referrer = getReferrer(_trader)
193207 let fee = getDefaultFee()
194208 let amountToReferrer = muld(_amount, fee)
195209 $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
196210 }
197211 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
198212 }
199213 }
200214
201215
202216
203217 @Callable(i)
204218 func claimRewards () = {
205219 let referrer = toString(i.caller)
206220 let totalRewards = getReferrerEarned(referrer)
207221 let totalClaimed = getReferrerClaimed(referrer)
208222 let toClaim = (totalRewards - totalClaimed)
209223 if ((toClaim > 0))
210224 then [IntegerEntry(getReferrerClaimedKey(referrer), (getReferrerClaimed(referrer) + toClaim)), ScriptTransfer(i.caller, toClaim, quoteAsset())]
211225 else throw("Nothing to claim")
212226 }
213227
214228
215229
216230 @Callable(i)
217231 func initialize (_coordinator,_defaultFee) = if (initialized())
218232 then throw("Already initialized")
219233 else [StringEntry(k_coordinatorAddress, _coordinator), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
220234
221235
222236 @Verifier(tx)
223237 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
224238

github/deemru/w8io/873ac7e 
37.32 ms