tx · AZCc9kyAKttbeKGtdFGaKR1Q4ug72cqPfvCECk4SUPuU

3MsfzTgF7FjCGw7bzBUF8rYDG5rjaAQr6Mw:  -0.01400000 Waves

2023.02.22 22:45 [2461291] smart account 3MsfzTgF7FjCGw7bzBUF8rYDG5rjaAQr6Mw > SELF 0.00000000 Waves

{ "type": 13, "id": "AZCc9kyAKttbeKGtdFGaKR1Q4ug72cqPfvCECk4SUPuU", "fee": 1400000, "feeAssetId": null, "timestamp": 1677095076764, "version": 2, "chainId": 84, "sender": "3MsfzTgF7FjCGw7bzBUF8rYDG5rjaAQr6Mw", "senderPublicKey": "9hqVMottRorL2RAj5L1Jt8LHtHtJgz46ZQJ6Vvr3bUs2", "proofs": [ "4L6dJcDMNgMk8axC1jMkX8fYa7YnE7rxzdwbr3SAypkg3DSLsVsp2pWUSg7E2pAGecMmCeR93ZzG7vZktCikeVhk" ], "script": "base64:BgIuCAISAwoBCBIECgIBCBIHCgUBCAEIARIDCgEIEgMKAQgSABIAEgMKAQgSAwoBCCAACVNFUEFSQVRPUgICX18ACEtFWV9JTklUAgRJTklUAAxLRVlfTVVMVElTSUcCCE1VTFRJU0lHAApLRVlfU1RBVFVTAgZTVEFUVVMACktFWV9QQVVTRUQCBlBBVVNFRAAKS0VZX1BBVVNFUgIGUEFVU0VSAA1LRVlfQUxMT1dBTkNFAglBTExPV0FOQ0UAC0tFWV9BREFQVEVSAgdBREFQVEVSABNGVU5DX1JFTEVBU0VfVE9LRU5TAg1yZWxlYXNlVG9rZW5zAAdNQVhfSU5UAP//////////fwEQX3ZhbGlkYXRlQWRkcmVzcwIIYWRkcmVzc18EZXJyXwQHJG1hdGNoMAkApggBBQhhZGRyZXNzXwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgkAAgEFBGVycl8BDF92YWxpZGF0ZUludAQEdmFsXw5sb3dlckJvdW5kYXJ5Xw51cHBlckJvdW5kYXJ5XwRlcnJfAwMJAGYCBQ5sb3dlckJvdW5kYXJ5XwUEdmFsXwYJAGYCBQR2YWxfBQ51cHBlckJvdW5kYXJ5XwkAAgEFBGVycl8GAQlfbG9hZEluaXQABAckbWF0Y2gwCQCgCAEFCEtFWV9JTklUAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQlfc2F2ZUluaXQBB2lzSW5pdF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCEtFWV9JTklUBQdpc0luaXRfBQNuaWwBCl9sb2FkUGF1c2UABAckbWF0Y2gwCQCgCAEFCktFWV9QQVVTRUQDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBCl9zYXZlUGF1c2UBCWlzUGF1c2VkXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUKS0VZX1BBVVNFRAUJaXNQYXVzZWRfBQNuaWwBC19sb2FkUGF1c2VyAAQHJG1hdGNoMAkAoggBBQpLRVlfUEFVU0VSAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABC19zYXZlUGF1c2VyAQdwYXVzZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFCktFWV9QQVVTRVIJAKUIAQUHcGF1c2VyXwUDbmlsAQ1fbG9hZE11bHRpc2lnAAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAENX3NhdmVNdWx0aXNpZwEJbXVsdGlzaWdfCQDMCAIJAQtTdHJpbmdFbnRyeQIFDEtFWV9NVUxUSVNJRwkApQgBBQltdWx0aXNpZ18FA25pbAEOX2xvYWRBbGxvd2FuY2UBB2NhbGxlcl8EByRtYXRjaDAJAKAIAQkAuQkCCQDMCAIFDUtFWV9BTExPV0FOQ0UJAMwIAgkApQgBBQdjYWxsZXJfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEOX3NhdmVBbGxvd2FuY2UCB2NhbGxlcl8EdmFsXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgkAuQkCCQDMCAIFDUtFWV9BTExPV0FOQ0UJAMwIAgkApQgBBQdjYWxsZXJfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsAQxfbG9hZEFkYXB0ZXIBEWV4ZWN1dGlvbkNoYWluSWRfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBQtLRVlfQURBUFRFUgkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQxfc2F2ZUFkYXB0ZXICEWV4ZWN1dGlvbkNoYWluSWRfCGFkYXB0ZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBQtLRVlfQURBUFRFUgkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgkApQgBBQhhZGFwdGVyXwUDbmlsARFfb25seVRoaXNDb250cmFjdAEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8FBHRoaXMJAAIBAhlfb25seVRoaXNDb250cmFjdDogcmV2ZXJ0BgEQX3doZW5NdWx0aXNpZ1NldAADCQAAAgkBDV9sb2FkTXVsdGlzaWcACQEHQWRkcmVzcwEBAAkAAgECGF93aGVuTXVsdGlzaWdTZXQ6IHJldmVydAYBE193aGVuTm90SW5pdGlhbGl6ZWQAAwkBCV9sb2FkSW5pdAAJAAIBAhtfd2hlbk5vdEluaXRpYWxpemVkOiByZXZlcnQGARBfd2hlbkluaXRpYWxpemVkAAMJAQEhAQkBCV9sb2FkSW5pdAAJAAIBAhhfd2hlbkluaXRpYWxpemVkOiByZXZlcnQGAQ5fd2hlbk5vdFBhdXNlZAADCQEKX2xvYWRQYXVzZQAJAAIBAhZfd2hlbk5vdFBhdXNlZDogcmV2ZXJ0BgELX3doZW5QYXVzZWQAAwkBASEBCQEKX2xvYWRQYXVzZQAJAAIBAhNfd2hlblBhdXNlZDogcmV2ZXJ0BgELX29ubHlQYXVzZXIBB2NhbGxlcl8DCQECIT0CBQdjYWxsZXJfCQELX2xvYWRQYXVzZXIACQACAQITX29ubHlQYXVzZXI6IHJldmVydAYBDF93aGVuQWxsb3dlZAEHY2FsbGVyXwMJAQEhAQkBDl9sb2FkQWxsb3dhbmNlAQUHY2FsbGVyXwkAAgECFF93aGVuQWxsb3dlZDogcmV2ZXJ0BgkBaQEEaW5pdAEHcGF1c2VyXwQDZXJyAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARNfd2hlbk5vdEluaXRpYWxpemVkAAcJARBfd2hlbk11bHRpc2lnU2V0AAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHAwkAAAIFA2VycgUDZXJyCQCUCgIJAM4IAgkBCV9zYXZlSW5pdAEGCQELX3NhdmVQYXVzZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdwYXVzZXJfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnNldEFkYXB0ZXICEWV4ZWN1dGlvbkNoYWluSWRfCGFkYXB0ZXJfBANlcnIDAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBDF92YWxpZGF0ZUludAQFEWV4ZWN1dGlvbkNoYWluSWRfAAAFB01BWF9JTlQCJHNldEFkYXB0ZXI6IGludmFsaWQgZXhlY3V0aW9uQ2hhaW5JZAcJARBfdmFsaWRhdGVBZGRyZXNzAgUIYWRhcHRlcl8CG3NldEFkYXB0ZXI6IGludmFsaWQgYWRhcHRlcgcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDF9zYXZlQWRhcHRlcgIFEWV4ZWN1dGlvbkNoYWluSWRfCQERQGV4dHJOYXRpdmUoMTA2MikBBQhhZGFwdGVyXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1yZWxlYXNlVG9rZW5zBRFleGVjdXRpb25DaGFpbklkXw9leGVjdXRpb25Bc3NldF8HYW1vdW50XwpyZWNpcGllbnRfDmdhc2xlc3NSZXdhcmRfBANlcnIDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEOX3doZW5Ob3RQYXVzZWQABwkBDF93aGVuQWxsb3dlZAEIBQFpBmNhbGxlcgcDCQAAAgUDZXJyBQNlcnIECmludm9jYXRpb24JAPwHBAkBDF9sb2FkQWRhcHRlcgEFEWV4ZWN1dGlvbkNoYWluSWRfBRNGVU5DX1JFTEVBU0VfVE9LRU5TCQDMCAIFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIFD2V4ZWN1dGlvbkFzc2V0XwkAzAgCBQdhbW91bnRfCQDMCAIFCnJlY2lwaWVudF8JAMwIAgUOZ2FzbGVzc1Jld2FyZF8FA25pbAUDbmlsAwkAAAIFCmludm9jYXRpb24FCmludm9jYXRpb24JAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBWFsbG93AQdjYWxsZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB2NhbGxlcl8CFWFsbG93OiBpbnZhbGlkIGNhbGxlcgcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDl9zYXZlQWxsb3dhbmNlAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUHY2FsbGVyXwYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZGlzYWxsb3cBB2NhbGxlcl8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUHY2FsbGVyXwIYZGlzYWxsb3c6IGludmFsaWQgY2FsbGVyBwMJAAACBQNlcnIFA2VycgkAlAoCCQEOX3NhdmVBbGxvd2FuY2UCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdjYWxsZXJfBwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVwYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fd2hlbk5vdFBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5wYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQtfd2hlblBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQcFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMdXBkYXRlUGF1c2VyAQdwYXVzZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CFGluaXQ6IGludmFsaWQgcGF1c2VyBwMJAAACBQNlcnIFA2VycgkAlAoCCQELX3NhdmVQYXVzZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdwYXVzZXJfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3NldE11bHRpc2lnAQltdWx0aXNpZ18EA2VycgMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF92YWxpZGF0ZUFkZHJlc3MCBQltdWx0aXNpZ18CHXNldE11bHRpc2lnOiBpbnZhbGlkIG11bHRpc2lnBwMJAAACBQNlcnIFA2VycgkAlAoCCQENX3NhdmVNdWx0aXNpZwEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW11bHRpc2lnXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcJALkJAgkAzAgCBQpLRVlfU1RBVFVTCQDMCAIJAKUIAQUEdGhpcwkAzAgCCQDYBAEIBQJ0eAJpZAUDbmlsBQlTRVBBUkFUT1IHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V587tWrw==", "height": 2461291, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5emWUxBihcyW95P7kp2WXAWTSQYqjA6R2F7eS2KYmrtM Next: none Diff:
OldNewDifferences
99
1010 let KEY_STATUS = "STATUS"
1111
12-let KEY_MINTER = "MINTER"
12+let KEY_PAUSED = "PAUSED"
1313
14-let KEY_ASSET = "ASSET"
14+let KEY_PAUSER = "PAUSER"
1515
16-let KEY_SPONSORSHIP_MANAGER = "SPONSORSHIP_MANAGER"
16+let KEY_ALLOWANCE = "ALLOWANCE"
17+
18+let KEY_ADAPTER = "ADAPTER"
19+
20+let FUNC_RELEASE_TOKENS = "releaseTokens"
1721
1822 let MAX_INT = 9223372036854775807
1923
2024 func _validateAddress (address_,err_) = match addressFromString(address_) {
2125 case a: Address =>
22- true
23- case _ =>
24- throw(err_)
25-}
26-
27-
28-func _validateAsset (assetId_,err_) = match assetInfo(fromBase58String(assetId_)) {
29- case a: Asset =>
3026 true
3127 case _ =>
3228 throw(err_)
5147 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
5248
5349
50+func _loadPause () = match getBoolean(KEY_PAUSED) {
51+ case a: Boolean =>
52+ a
53+ case _ =>
54+ false
55+}
56+
57+
58+func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
59+
60+
61+func _loadPauser () = match getString(KEY_PAUSER) {
62+ case a: String =>
63+ addressFromStringValue(a)
64+ case _ =>
65+ Address(base58'')
66+}
67+
68+
69+func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
70+
71+
5472 func _loadMultisig () = match getString(KEY_MULTISIG) {
5573 case a: String =>
5674 addressFromStringValue(a)
6280 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
6381
6482
65-func _loadMinter (minter_) = match getBoolean(makeString([KEY_MINTER, toString(minter_)], SEPARATOR)) {
83+func _loadAllowance (caller_) = match getBoolean(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR)) {
6684 case a: Boolean =>
6785 a
6886 case _ =>
7088 }
7189
7290
73-func _saveMinter (minter_,val_) = [BooleanEntry(makeString([KEY_MINTER, toString(minter_)], SEPARATOR), val_)]
91+func _saveAllowance (caller_,val_) = [BooleanEntry(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR), val_)]
7492
7593
76-func _loadAsset () = match getString(KEY_ASSET) {
77- case a: String =>
78- fromBase58String(a)
79- case _ =>
80- base58''
81-}
82-
83-
84-func _saveAsset (assetId_) = [StringEntry(KEY_ASSET, toBase58String(assetId_))]
85-
86-
87-func _loadSponsorshipManager () = match getString(KEY_SPONSORSHIP_MANAGER) {
94+func _loadAdapter (executionChainId_) = match getString(makeString([KEY_ADAPTER, toString(executionChainId_)], SEPARATOR)) {
8895 case a: String =>
8996 addressFromStringValue(a)
9097 case _ =>
9299 }
93100
94101
95-func _saveSponsorshipManager (manager_) = [StringEntry(KEY_SPONSORSHIP_MANAGER, toString(manager_))]
96-
97-
98-func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
99- then throw("_whenMultisigSet: revert")
100- else true
102+func _saveAdapter (executionChainId_,adapter_) = [StringEntry(makeString([KEY_ADAPTER, toString(executionChainId_)], SEPARATOR), toString(adapter_))]
101103
102104
103105 func _onlyThisContract (caller_) = if ((caller_ != this))
105107 else true
106108
107109
108-func _onlyMinter (caller_) = if (!(_loadMinter(caller_)))
109- then throw("_onlyMinter: revert")
110- else true
111-
112-
113-func _onlySponsorshipManager (caller_) = if ((caller_ != _loadSponsorshipManager()))
114- then throw("_onlySponsorshipManager: revert")
110+func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
111+ then throw("_whenMultisigSet: revert")
115112 else true
116113
117114
125122 else true
126123
127124
125+func _whenNotPaused () = if (_loadPause())
126+ then throw("_whenNotPaused: revert")
127+ else true
128+
129+
130+func _whenPaused () = if (!(_loadPause()))
131+ then throw("_whenPaused: revert")
132+ else true
133+
134+
135+func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
136+ then throw("_onlyPauser: revert")
137+ else true
138+
139+
140+func _whenAllowed (caller_) = if (!(_loadAllowance(caller_)))
141+ then throw("_whenAllowed: revert")
142+ else true
143+
144+
128145 @Callable(i)
129-func init (tokenName_,tokenDescr_,tokenDecimals_) = {
130- let err = if (if (if (if (if (_onlyThisContract(i.caller))
146+func init (pauser_) = {
147+ let err = if (if (if (_onlyThisContract(i.caller))
131148 then _whenNotInitialized()
132149 else false)
133150 then _whenMultisigSet()
134151 else false)
135- then _validateInt(size(tokenName_), 4, 16, "init: invalid token name")
152+ then _validateAddress(pauser_, "init: invalid pauser")
153+ else false
154+ if ((err == err))
155+ then $Tuple2((_saveInit(true) ++ _savePauser(addressFromStringValue(pauser_))), unit)
156+ else throw("Strict value is not equal to itself.")
157+ }
158+
159+
160+
161+@Callable(i)
162+func setAdapter (executionChainId_,adapter_) = {
163+ let err = if (if (if (_onlyThisContract(i.caller))
164+ then _whenInitialized()
136165 else false)
137- then _validateInt(size(tokenDescr_), 0, 255, "init: invalid token description")
166+ then _validateInt(executionChainId_, 0, MAX_INT, "setAdapter: invalid executionChainId")
138167 else false)
139- then _validateInt(tokenDecimals_, 0, 8, "init: invalid decimals")
168+ then _validateAddress(adapter_, "setAdapter: invalid adapter")
169+ else false
170+ if ((err == err))
171+ then $Tuple2(_saveAdapter(executionChainId_, addressFromStringValue(adapter_)), unit)
172+ else throw("Strict value is not equal to itself.")
173+ }
174+
175+
176+
177+@Callable(i)
178+func releaseTokens (executionChainId_,executionAsset_,amount_,recipient_,gaslessReward_) = {
179+ let err = if (if (_whenInitialized())
180+ then _whenNotPaused()
181+ else false)
182+ then _whenAllowed(i.caller)
140183 else false
141184 if ((err == err))
142185 then {
143- let issue = Issue(tokenName_, tokenDescr_, 0, tokenDecimals_, true)
144- let assetId = calculateAssetId(issue)
145- $Tuple2(((_saveInit(true) ++ _saveAsset(assetId)) ++ [issue]), unit)
186+ let invocation = invoke(_loadAdapter(executionChainId_), FUNC_RELEASE_TOKENS, [executionChainId_, executionAsset_, amount_, recipient_, gaslessReward_], nil)
187+ if ((invocation == invocation))
188+ then $Tuple2(nil, unit)
189+ else throw("Strict value is not equal to itself.")
146190 }
147191 else throw("Strict value is not equal to itself.")
148192 }
150194
151195
152196 @Callable(i)
153-func mint (amount_,recipient_) = {
154- let err = if (if (if (_whenInitialized())
155- then _onlyMinter(i.caller)
197+func allow (caller_) = {
198+ let err = if (if (_onlyThisContract(i.caller))
199+ then _whenInitialized()
156200 else false)
157- then _validateInt(amount_, 0, MAX_INT, "mint: invalid amount")
158- else false)
159- then _validateAddress(recipient_, "mint: invalid recipient")
201+ then _validateAddress(caller_, "allow: invalid caller")
160202 else false
161203 if ((err == err))
162- then {
163- let asset = _loadAsset()
164- $Tuple2([Reissue(asset, amount_, true), ScriptTransfer(addressFromStringValue(recipient_), amount_, asset)], unit)
165- }
204+ then $Tuple2(_saveAllowance(addressFromStringValue(caller_), true), unit)
166205 else throw("Strict value is not equal to itself.")
167206 }
168207
169208
170209
171210 @Callable(i)
172-func mintMany (amount_,recipients_) = {
173- let err = if (if (_whenInitialized())
174- then _onlyMinter(i.caller)
211+func disallow (caller_) = {
212+ let err = if (if (_onlyThisContract(i.caller))
213+ then _whenInitialized()
175214 else false)
176- then _validateInt(amount_, 0, MAX_INT, "mint: invalid amount")
215+ then _validateAddress(caller_, "disallow: invalid caller")
177216 else false
178217 if ((err == err))
179- then {
180- let asset = _loadAsset()
181- func foldfunc (acc_,elem_) = (acc_ :+ ScriptTransfer(addressFromStringValue(elem_), amount_, asset))
182-
183- let actions = {
184- let $l = recipients_
185- let $s = size($l)
186- let $acc0 = nil
187- func $f0_1 ($a,$i) = if (($i >= $s))
188- then $a
189- else foldfunc($a, $l[$i])
190-
191- func $f0_2 ($a,$i) = if (($i >= $s))
192- then $a
193- else throw("List size exceeds 51")
194-
195- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51)
196- }
197- $Tuple2(([Reissue(asset, (amount_ * size(recipients_)), true)] ++ actions), unit)
198- }
218+ then $Tuple2(_saveAllowance(addressFromStringValue(caller_), false), unit)
199219 else throw("Strict value is not equal to itself.")
200220 }
201221
202222
203223
204224 @Callable(i)
205-func addMinter (minter_) = {
206- let err = if (if (_onlyThisContract(i.caller))
225+func pause () = {
226+ let err = if (if (_onlyPauser(i.caller))
207227 then _whenInitialized()
208228 else false)
209- then _validateAddress(minter_, "init: invalid minter")
229+ then _whenNotPaused()
210230 else false
211231 if ((err == err))
212- then $Tuple2(_saveMinter(addressFromStringValue(minter_), true), unit)
232+ then $Tuple2(_savePause(true), unit)
213233 else throw("Strict value is not equal to itself.")
214234 }
215235
216236
217237
218238 @Callable(i)
219-func removeMinter (minter_) = {
220- let err = if (if (_onlyThisContract(i.caller))
239+func unpause () = {
240+ let err = if (if (_onlyPauser(i.caller))
221241 then _whenInitialized()
222242 else false)
223- then _validateAddress(minter_, "init: invalid minter")
243+ then _whenPaused()
224244 else false
225245 if ((err == err))
226- then $Tuple2(_saveMinter(addressFromStringValue(minter_), false), unit)
246+ then $Tuple2(_savePause(false), unit)
227247 else throw("Strict value is not equal to itself.")
228248 }
229249
230250
231251
232252 @Callable(i)
233-func getAssetId () = $Tuple2(nil, _loadAsset())
234-
235-
236-
237-@Callable(i)
238-func getDecimals () = {
239- let decimals = match assetInfo(_loadAsset()) {
240- case a: Asset =>
241- a.decimals
242- case _ =>
243- throw("getDecimals: revert")
244- }
245- $Tuple2(nil, decimals)
246- }
247-
248-
249-
250-@Callable(i)
251-func setSponsorshipManager (manager_) = {
252- let err = if (_onlyThisContract(i.caller))
253- then _validateAddress(manager_, "setSponsorshipManager: invalid manager")
253+func updatePauser (pauser_) = {
254+ let err = if (if (_onlyThisContract(i.caller))
255+ then _whenInitialized()
256+ else false)
257+ then _validateAddress(pauser_, "init: invalid pauser")
254258 else false
255259 if ((err == err))
256- then $Tuple2(_saveSponsorshipManager(addressFromStringValue(manager_)), unit)
257- else throw("Strict value is not equal to itself.")
258- }
259-
260-
261-
262-@Callable(i)
263-func updateSponsorship (minSponsoredAssetFee_,wavesRequiredAmount_) = {
264- let err = if (if (_onlySponsorshipManager(i.caller))
265- then _validateInt(minSponsoredAssetFee_, 0, MAX_INT, "updateSponsorship: invalid sponsor fee")
266- else false)
267- then _validateInt(wavesRequiredAmount_, 0, MAX_INT, "updateSponsorship: invalid waves required amount")
268- else false
269- if ((err == err))
270- then {
271- let sponsorAsset = _loadAsset()
272- let sponsorAmount = assetBalance(this, sponsorAsset)
273- let minSponsoredAssetFee = if ((minSponsoredAssetFee_ == 0))
274- then unit
275- else minSponsoredAssetFee_
276- let actions = if ((wavesBalance(this).regular > wavesRequiredAmount_))
277- then [ScriptTransfer(i.caller, (wavesBalance(this).regular - wavesRequiredAmount_), unit)]
278- else nil
279- $Tuple2((actions ++ [ScriptTransfer(i.caller, sponsorAmount, sponsorAsset), SponsorFee(sponsorAsset, minSponsoredAssetFee)]), sponsorAmount)
280- }
260+ then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
281261 else throw("Strict value is not equal to itself.")
282262 }
283263
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let KEY_INIT = "INIT"
77
88 let KEY_MULTISIG = "MULTISIG"
99
1010 let KEY_STATUS = "STATUS"
1111
12-let KEY_MINTER = "MINTER"
12+let KEY_PAUSED = "PAUSED"
1313
14-let KEY_ASSET = "ASSET"
14+let KEY_PAUSER = "PAUSER"
1515
16-let KEY_SPONSORSHIP_MANAGER = "SPONSORSHIP_MANAGER"
16+let KEY_ALLOWANCE = "ALLOWANCE"
17+
18+let KEY_ADAPTER = "ADAPTER"
19+
20+let FUNC_RELEASE_TOKENS = "releaseTokens"
1721
1822 let MAX_INT = 9223372036854775807
1923
2024 func _validateAddress (address_,err_) = match addressFromString(address_) {
2125 case a: Address =>
22- true
23- case _ =>
24- throw(err_)
25-}
26-
27-
28-func _validateAsset (assetId_,err_) = match assetInfo(fromBase58String(assetId_)) {
29- case a: Asset =>
3026 true
3127 case _ =>
3228 throw(err_)
3329 }
3430
3531
3632 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
3733 then true
3834 else (val_ > upperBoundary_))
3935 then throw(err_)
4036 else true
4137
4238
4339 func _loadInit () = match getBoolean(KEY_INIT) {
4440 case a: Boolean =>
4541 a
4642 case _ =>
4743 false
4844 }
4945
5046
5147 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
5248
5349
50+func _loadPause () = match getBoolean(KEY_PAUSED) {
51+ case a: Boolean =>
52+ a
53+ case _ =>
54+ false
55+}
56+
57+
58+func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
59+
60+
61+func _loadPauser () = match getString(KEY_PAUSER) {
62+ case a: String =>
63+ addressFromStringValue(a)
64+ case _ =>
65+ Address(base58'')
66+}
67+
68+
69+func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
70+
71+
5472 func _loadMultisig () = match getString(KEY_MULTISIG) {
5573 case a: String =>
5674 addressFromStringValue(a)
5775 case _ =>
5876 Address(base58'')
5977 }
6078
6179
6280 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
6381
6482
65-func _loadMinter (minter_) = match getBoolean(makeString([KEY_MINTER, toString(minter_)], SEPARATOR)) {
83+func _loadAllowance (caller_) = match getBoolean(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR)) {
6684 case a: Boolean =>
6785 a
6886 case _ =>
6987 false
7088 }
7189
7290
73-func _saveMinter (minter_,val_) = [BooleanEntry(makeString([KEY_MINTER, toString(minter_)], SEPARATOR), val_)]
91+func _saveAllowance (caller_,val_) = [BooleanEntry(makeString([KEY_ALLOWANCE, toString(caller_)], SEPARATOR), val_)]
7492
7593
76-func _loadAsset () = match getString(KEY_ASSET) {
77- case a: String =>
78- fromBase58String(a)
79- case _ =>
80- base58''
81-}
82-
83-
84-func _saveAsset (assetId_) = [StringEntry(KEY_ASSET, toBase58String(assetId_))]
85-
86-
87-func _loadSponsorshipManager () = match getString(KEY_SPONSORSHIP_MANAGER) {
94+func _loadAdapter (executionChainId_) = match getString(makeString([KEY_ADAPTER, toString(executionChainId_)], SEPARATOR)) {
8895 case a: String =>
8996 addressFromStringValue(a)
9097 case _ =>
9198 Address(base58'')
9299 }
93100
94101
95-func _saveSponsorshipManager (manager_) = [StringEntry(KEY_SPONSORSHIP_MANAGER, toString(manager_))]
96-
97-
98-func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
99- then throw("_whenMultisigSet: revert")
100- else true
102+func _saveAdapter (executionChainId_,adapter_) = [StringEntry(makeString([KEY_ADAPTER, toString(executionChainId_)], SEPARATOR), toString(adapter_))]
101103
102104
103105 func _onlyThisContract (caller_) = if ((caller_ != this))
104106 then throw("_onlyThisContract: revert")
105107 else true
106108
107109
108-func _onlyMinter (caller_) = if (!(_loadMinter(caller_)))
109- then throw("_onlyMinter: revert")
110- else true
111-
112-
113-func _onlySponsorshipManager (caller_) = if ((caller_ != _loadSponsorshipManager()))
114- then throw("_onlySponsorshipManager: revert")
110+func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
111+ then throw("_whenMultisigSet: revert")
115112 else true
116113
117114
118115 func _whenNotInitialized () = if (_loadInit())
119116 then throw("_whenNotInitialized: revert")
120117 else true
121118
122119
123120 func _whenInitialized () = if (!(_loadInit()))
124121 then throw("_whenInitialized: revert")
125122 else true
126123
127124
125+func _whenNotPaused () = if (_loadPause())
126+ then throw("_whenNotPaused: revert")
127+ else true
128+
129+
130+func _whenPaused () = if (!(_loadPause()))
131+ then throw("_whenPaused: revert")
132+ else true
133+
134+
135+func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
136+ then throw("_onlyPauser: revert")
137+ else true
138+
139+
140+func _whenAllowed (caller_) = if (!(_loadAllowance(caller_)))
141+ then throw("_whenAllowed: revert")
142+ else true
143+
144+
128145 @Callable(i)
129-func init (tokenName_,tokenDescr_,tokenDecimals_) = {
130- let err = if (if (if (if (if (_onlyThisContract(i.caller))
146+func init (pauser_) = {
147+ let err = if (if (if (_onlyThisContract(i.caller))
131148 then _whenNotInitialized()
132149 else false)
133150 then _whenMultisigSet()
134151 else false)
135- then _validateInt(size(tokenName_), 4, 16, "init: invalid token name")
152+ then _validateAddress(pauser_, "init: invalid pauser")
153+ else false
154+ if ((err == err))
155+ then $Tuple2((_saveInit(true) ++ _savePauser(addressFromStringValue(pauser_))), unit)
156+ else throw("Strict value is not equal to itself.")
157+ }
158+
159+
160+
161+@Callable(i)
162+func setAdapter (executionChainId_,adapter_) = {
163+ let err = if (if (if (_onlyThisContract(i.caller))
164+ then _whenInitialized()
136165 else false)
137- then _validateInt(size(tokenDescr_), 0, 255, "init: invalid token description")
166+ then _validateInt(executionChainId_, 0, MAX_INT, "setAdapter: invalid executionChainId")
138167 else false)
139- then _validateInt(tokenDecimals_, 0, 8, "init: invalid decimals")
168+ then _validateAddress(adapter_, "setAdapter: invalid adapter")
169+ else false
170+ if ((err == err))
171+ then $Tuple2(_saveAdapter(executionChainId_, addressFromStringValue(adapter_)), unit)
172+ else throw("Strict value is not equal to itself.")
173+ }
174+
175+
176+
177+@Callable(i)
178+func releaseTokens (executionChainId_,executionAsset_,amount_,recipient_,gaslessReward_) = {
179+ let err = if (if (_whenInitialized())
180+ then _whenNotPaused()
181+ else false)
182+ then _whenAllowed(i.caller)
140183 else false
141184 if ((err == err))
142185 then {
143- let issue = Issue(tokenName_, tokenDescr_, 0, tokenDecimals_, true)
144- let assetId = calculateAssetId(issue)
145- $Tuple2(((_saveInit(true) ++ _saveAsset(assetId)) ++ [issue]), unit)
186+ let invocation = invoke(_loadAdapter(executionChainId_), FUNC_RELEASE_TOKENS, [executionChainId_, executionAsset_, amount_, recipient_, gaslessReward_], nil)
187+ if ((invocation == invocation))
188+ then $Tuple2(nil, unit)
189+ else throw("Strict value is not equal to itself.")
146190 }
147191 else throw("Strict value is not equal to itself.")
148192 }
149193
150194
151195
152196 @Callable(i)
153-func mint (amount_,recipient_) = {
154- let err = if (if (if (_whenInitialized())
155- then _onlyMinter(i.caller)
197+func allow (caller_) = {
198+ let err = if (if (_onlyThisContract(i.caller))
199+ then _whenInitialized()
156200 else false)
157- then _validateInt(amount_, 0, MAX_INT, "mint: invalid amount")
158- else false)
159- then _validateAddress(recipient_, "mint: invalid recipient")
201+ then _validateAddress(caller_, "allow: invalid caller")
160202 else false
161203 if ((err == err))
162- then {
163- let asset = _loadAsset()
164- $Tuple2([Reissue(asset, amount_, true), ScriptTransfer(addressFromStringValue(recipient_), amount_, asset)], unit)
165- }
204+ then $Tuple2(_saveAllowance(addressFromStringValue(caller_), true), unit)
166205 else throw("Strict value is not equal to itself.")
167206 }
168207
169208
170209
171210 @Callable(i)
172-func mintMany (amount_,recipients_) = {
173- let err = if (if (_whenInitialized())
174- then _onlyMinter(i.caller)
211+func disallow (caller_) = {
212+ let err = if (if (_onlyThisContract(i.caller))
213+ then _whenInitialized()
175214 else false)
176- then _validateInt(amount_, 0, MAX_INT, "mint: invalid amount")
215+ then _validateAddress(caller_, "disallow: invalid caller")
177216 else false
178217 if ((err == err))
179- then {
180- let asset = _loadAsset()
181- func foldfunc (acc_,elem_) = (acc_ :+ ScriptTransfer(addressFromStringValue(elem_), amount_, asset))
182-
183- let actions = {
184- let $l = recipients_
185- let $s = size($l)
186- let $acc0 = nil
187- func $f0_1 ($a,$i) = if (($i >= $s))
188- then $a
189- else foldfunc($a, $l[$i])
190-
191- func $f0_2 ($a,$i) = if (($i >= $s))
192- then $a
193- else throw("List size exceeds 51")
194-
195- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51)
196- }
197- $Tuple2(([Reissue(asset, (amount_ * size(recipients_)), true)] ++ actions), unit)
198- }
218+ then $Tuple2(_saveAllowance(addressFromStringValue(caller_), false), unit)
199219 else throw("Strict value is not equal to itself.")
200220 }
201221
202222
203223
204224 @Callable(i)
205-func addMinter (minter_) = {
206- let err = if (if (_onlyThisContract(i.caller))
225+func pause () = {
226+ let err = if (if (_onlyPauser(i.caller))
207227 then _whenInitialized()
208228 else false)
209- then _validateAddress(minter_, "init: invalid minter")
229+ then _whenNotPaused()
210230 else false
211231 if ((err == err))
212- then $Tuple2(_saveMinter(addressFromStringValue(minter_), true), unit)
232+ then $Tuple2(_savePause(true), unit)
213233 else throw("Strict value is not equal to itself.")
214234 }
215235
216236
217237
218238 @Callable(i)
219-func removeMinter (minter_) = {
220- let err = if (if (_onlyThisContract(i.caller))
239+func unpause () = {
240+ let err = if (if (_onlyPauser(i.caller))
221241 then _whenInitialized()
222242 else false)
223- then _validateAddress(minter_, "init: invalid minter")
243+ then _whenPaused()
224244 else false
225245 if ((err == err))
226- then $Tuple2(_saveMinter(addressFromStringValue(minter_), false), unit)
246+ then $Tuple2(_savePause(false), unit)
227247 else throw("Strict value is not equal to itself.")
228248 }
229249
230250
231251
232252 @Callable(i)
233-func getAssetId () = $Tuple2(nil, _loadAsset())
234-
235-
236-
237-@Callable(i)
238-func getDecimals () = {
239- let decimals = match assetInfo(_loadAsset()) {
240- case a: Asset =>
241- a.decimals
242- case _ =>
243- throw("getDecimals: revert")
244- }
245- $Tuple2(nil, decimals)
246- }
247-
248-
249-
250-@Callable(i)
251-func setSponsorshipManager (manager_) = {
252- let err = if (_onlyThisContract(i.caller))
253- then _validateAddress(manager_, "setSponsorshipManager: invalid manager")
253+func updatePauser (pauser_) = {
254+ let err = if (if (_onlyThisContract(i.caller))
255+ then _whenInitialized()
256+ else false)
257+ then _validateAddress(pauser_, "init: invalid pauser")
254258 else false
255259 if ((err == err))
256- then $Tuple2(_saveSponsorshipManager(addressFromStringValue(manager_)), unit)
257- else throw("Strict value is not equal to itself.")
258- }
259-
260-
261-
262-@Callable(i)
263-func updateSponsorship (minSponsoredAssetFee_,wavesRequiredAmount_) = {
264- let err = if (if (_onlySponsorshipManager(i.caller))
265- then _validateInt(minSponsoredAssetFee_, 0, MAX_INT, "updateSponsorship: invalid sponsor fee")
266- else false)
267- then _validateInt(wavesRequiredAmount_, 0, MAX_INT, "updateSponsorship: invalid waves required amount")
268- else false
269- if ((err == err))
270- then {
271- let sponsorAsset = _loadAsset()
272- let sponsorAmount = assetBalance(this, sponsorAsset)
273- let minSponsoredAssetFee = if ((minSponsoredAssetFee_ == 0))
274- then unit
275- else minSponsoredAssetFee_
276- let actions = if ((wavesBalance(this).regular > wavesRequiredAmount_))
277- then [ScriptTransfer(i.caller, (wavesBalance(this).regular - wavesRequiredAmount_), unit)]
278- else nil
279- $Tuple2((actions ++ [ScriptTransfer(i.caller, sponsorAmount, sponsorAsset), SponsorFee(sponsorAsset, minSponsoredAssetFee)]), sponsorAmount)
280- }
260+ then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
281261 else throw("Strict value is not equal to itself.")
282262 }
283263
284264
285265
286266 @Callable(i)
287267 func setMultisig (multisig_) = {
288268 let err = if (_onlyThisContract(i.caller))
289269 then _validateAddress(multisig_, "setMultisig: invalid multisig")
290270 else false
291271 if ((err == err))
292272 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
293273 else throw("Strict value is not equal to itself.")
294274 }
295275
296276
297277 @Verifier(tx)
298278 func verify () = match getString(KEY_MULTISIG) {
299279 case multisig: String =>
300280 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
301281 case _ =>
302282 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
303283 }
304284

github/deemru/w8io/169f3d6 
69.84 ms