tx · EtPCdmPULL5vQxS7jpsWzCfXux5pPPicckTUJ33httnm

3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz:  -0.00600000 Waves

2022.10.04 11:27 [2257350] smart account 3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz > SELF 0.00000000 Waves

{ "type": 13, "id": "EtPCdmPULL5vQxS7jpsWzCfXux5pPPicckTUJ33httnm", "fee": 600000, "feeAssetId": null, "timestamp": 1664872143986, "version": 2, "chainId": 84, "sender": "3NA73oUXjqp7SpudXWV1yMFuKm9awPbqsVz", "senderPublicKey": "2mHW72YTfnxJ1M8WsdUQjgpp3a2SUbt9mbAiePGiuJok", "proofs": [ "2EtWJJdmyPmQnDYA9B9sDFm3P1dX9WKV883JwfRXqUrYN4E2gWf1iroNHWDJJUL12guEbxZL8TXDaf6AkkrZ2XbR" ], "script": "base64:AAIFAAAAAAAAABIIAhIECgIIARIDCgEIEgMKAQgAAAAVAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQAAAAxtYXliZUFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAAxtYXliZUFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABpDYW4ndCBwYXJzZSBhZGRyZXNzIGZyb20gJwUAAAAMbWF5YmVBZGRyZXNzAgAAAAEnAQAAAAprZXlfZW50aXR5AAAAAwAAAARuYW1lAAAAAnBrAAAACHByb3BlcnR5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABG5hbWUCAAAAAV8FAAAAAnBrAgAAAAFfBQAAAAhwcm9wZXJ0eQEAAAAOa2V5X1Rva2VuX25hbWUAAAABAAAAB3Rva2VuSWQJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAFVG9rZW4FAAAAB3Rva2VuSWQCAAAABG5hbWUBAAAADmtleV9OYW1lX3Rva2VuAAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAABXRva2VuAQAAAA5rZXlfTmFtZV9vd25lcgAAAAEAAAAEbmFtZQkBAAAACmtleV9lbnRpdHkAAAADAgAAAAROYW1lBQAAAARuYW1lAgAAAAVvd25lcgEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAACWV4cGlyZXNBdAEAAAASa2V5X05hbWVfY3JlYXRlZEF0AAAAAQAAAARuYW1lCQEAAAAKa2V5X2VudGl0eQAAAAMCAAAABE5hbWUFAAAABG5hbWUCAAAACWNyZWF0ZWRBdAEAAAAOa2V5X093bmVyX25hbWUAAAABAAAAB2FkZHJlc3MJAQAAAAprZXlfZW50aXR5AAAAAwIAAAAFT3duZXIFAAAAB2FkZHJlc3MCAAAABG5hbWUAAAAAEmtleV9hdWN0aW9uQWRkcmVzcwIAAAAOYXVjdGlvbkFkZHJlc3MAAAAAGmtleV9uYW1lRXhwaXJhdGlvbkludGVydmFsAgAAABZuYW1lRXhwaXJhdGlvbkludGVydmFsAAAAABRrZXlfbWF4QXV0aG9yaXplZEZlZQIAAAAQbWF4QXV0aG9yaXplZEZlZQAAAAARYXVjdGlvbkFkZHJlc3NTdHIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwUAAAASa2V5X2F1Y3Rpb25BZGRyZXNzAAAAAA5hdWN0aW9uQWRkcmVzcwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABBQAAABFhdWN0aW9uQWRkcmVzc1N0cgAAAAAWbmFtZUV4cGlyYXRpb25JbnRlcnZhbAkBAAAAEWdldEludGVnZXJPclRocm93AAAAAgUAAAAEdGhpcwUAAAAaa2V5X25hbWVFeHBpcmF0aW9uSW50ZXJ2YWwAAAAAEG1heEF1dGhvcml6ZWRGZWUJAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAFGtleV9tYXhBdXRob3JpemVkRmVlAQAAAAV3aG9JcwAAAAEAAAAEbmFtZQQAAAAJZXhwaXJlc0F0CQEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACBQAAAAR0aGlzCQEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQUAAAAEbmFtZQQAAAAFdG9rZW4JAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQUAAAAEbmFtZQQAAAAFb3duZXIJAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbmFtZQkABRUAAAADBQAAAAVvd25lcgUAAAAJZXhwaXJlc0F0BQAAAAV0b2tlbgEAAAARaXNSZWdpc3RlcmVkVG9rZW4AAAABAAAAB3Rva2VuSWQJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAA5rZXlfVG9rZW5fbmFtZQAAAAEFAAAAB3Rva2VuSWQBAAAAEGlzUmVnaXN0ZXJlZE5hbWUAAAABAAAABG5hbWUJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMJAQAAAA5rZXlfTmFtZV90b2tlbgAAAAEFAAAABG5hbWUBAAAADWlzRXhwaXJlZE5hbWUAAAABAAAABG5hbWUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEmtleV9OYW1lX2V4cGlyZXNBdAAAAAEFAAAABG5hbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAJZXhwaXJlc0F0BQAAAAckbWF0Y2gwCQAAZgAAAAIFAAAACWV4cGlyZXNBdAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAHAAAAAwAAAANpbnYBAAAABGluaXQAAAACAAAADmF1Y3Rpb25BZGRyZXNzAAAAFm5hbWVFeHBpcmF0aW9uSW50ZXJ2YWwDCQEAAAACIT0AAAACCAUAAAADaW52AAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABJrZXlfYXVjdGlvbkFkZHJlc3MFAAAADmF1Y3Rpb25BZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABprZXlfbmFtZUV4cGlyYXRpb25JbnRlcnZhbAUAAAAWbmFtZUV4cGlyYXRpb25JbnRlcnZhbAUAAAADbmlsAAAAA2ludgEAAAARcmVnaXN0ZXJPd25lcnNoaXAAAAABAAAABG5hbWUEAAAABmNhbGxlcggFAAAAA2ludgAAAAZjYWxsZXIEAAAACWNhbGxlclN0cgkABCUAAAABBQAAAAZjYWxsZXIEAAAACyR0MDI3ODYzMDQxBAAAAAckbWF0Y2gwCQAD/AAAAAQFAAAADmF1Y3Rpb25BZGRyZXNzAgAAAA1nZXRXaW5uZXJJbmZvCQAETAAAAAIFAAAABG5hbWUFAAAAA25pbAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABUoSW50LCBTdHJpbmcsIFN0cmluZykEAAAACndpbm5lckluZm8FAAAAByRtYXRjaDAFAAAACndpbm5lckluZm8JAAACAAAAAQIAAAAfVW5leHBlY3RlZCBnZXRXaW5uZXJJbmZvIHJlc3VsdAQAAAAPd2lubmVyQXVjdGlvbklkCAUAAAALJHQwMjc4NjMwNDEAAAACXzEEAAAADXdpbm5lckFkZHJlc3MIBQAAAAskdDAyNzg2MzA0MQAAAAJfMgQAAAAKd2lubmVySGFzaAgFAAAACyR0MDI3ODYzMDQxAAAAAl8zAwkBAAAAAiE9AAAAAgUAAAAJY2FsbGVyU3RyBQAAAA13aW5uZXJBZGRyZXNzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1dpbm5lciBhZGRyZXNzIAUAAAANd2lubmVyQWRkcmVzcwIAAAAhZG9lc24ndCBtYXRjaCB3aXRoIGNhbGxlciBhZGRyZXNzBQAAAAljYWxsZXJTdHIDAwkBAAAAEGlzUmVnaXN0ZXJlZE5hbWUAAAABBQAAAARuYW1lCQEAAAABIQAAAAEJAQAAAA1pc0V4cGlyZWROYW1lAAAAAQUAAAAEbmFtZQcJAAACAAAAAQIAAAATTmFtZSBhbHJlYWR5IGluIHVzZQQAAAAOaXNzdWVOYW1lVG9rZW4JAARCAAAABQMJAABmAAAAAgkAATEAAAABBQAAAARuYW1lAAAAAAAAAAAQCQABLAAAAAIJAAEvAAAAAgUAAAAEbmFtZQAAAAAAAAAADwIAAAABfgkAAS8AAAACBQAAAARuYW1lAAAAAAAAAAAQBQAAAARuYW1lAAAAAAAAAAABAAAAAAAAAAAABwQAAAAHdG9rZW5JZAkABDgAAAABBQAAAA5pc3N1ZU5hbWVUb2tlbgQAAAAIdG9rZW5TdHIJAAJYAAAAAQUAAAAHdG9rZW5JZAQAAAAQaXNzdWVBbmRSZWdpc3RlcgkABEwAAAACBQAAAA5pc3N1ZU5hbWVUb2tlbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5X05hbWVfdG9rZW4AAAABBQAAAARuYW1lBQAAAAh0b2tlblN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5X1Rva2VuX25hbWUAAAABBQAAAAh0b2tlblN0cgUAAAAEbmFtZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmtleV9OYW1lX2NyZWF0ZWRBdAAAAAEFAAAABG5hbWUIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5X05hbWVfZXhwaXJlc0F0AAAAAQUAAAAEbmFtZQkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAWbmFtZUV4cGlyYXRpb25JbnRlcnZhbAUAAAADbmlsBAAAABdzZXRPd25lcnNoaXBBbmRUcmFuc2ZlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5X05hbWVfb3duZXIAAAABBQAAAARuYW1lBQAAAAljYWxsZXJTdHIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGY2FsbGVyAAAAAAAAAAABBQAAAAd0b2tlbklkBQAAAANuaWwEAAAADmZpbmFsaXplT3JpZ2luCQAD/AAAAAQFAAAADmF1Y3Rpb25BZGRyZXNzAgAAAA5maW5hbGl6ZU9yaWdpbgkABEwAAAACBQAAAARuYW1lBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAOZmluYWxpemVPcmlnaW4FAAAADmZpbmFsaXplT3JpZ2luCQAETgAAAAIFAAAAEGlzc3VlQW5kUmVnaXN0ZXIFAAAAF3NldE93bmVyc2hpcEFuZFRyYW5zZmVyCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAANpbnYBAAAAEGFwcHJvdmVPd25lcnNoaXAAAAABAAAABG5hbWUEAAAABmNhbGxlcggFAAAAA2ludgAAAAZjYWxsZXIEAAAACWNhbGxlclN0cgkABCUAAAABBQAAAAZjYWxsZXIEAAAABW93bmVyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbmFtZQIAAAAUT3duZXIgaXMgbm90IGRlZmluZWQEAAAACHRva2VuU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAADmtleV9OYW1lX3Rva2VuAAAAAQUAAAAEbmFtZQIAAAAgTm8gdG9rZW4gaXMgaXNzdWVkIGZvciB0aGlzIG5hbWUEAAAAB3Rva2VuSWQJAAJZAAAAAQUAAAAIdG9rZW5TdHIEAAAABXRva2VuBAAAAAckbWF0Y2gwCQAD7AAAAAEFAAAAB3Rva2VuSWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABUFzc2V0BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAEENhbid0IGZpbmQgYXNzZXQDCQAAAAAAAAIFAAAACWNhbGxlclN0cgUAAAAFb3duZXIJAAACAAAAAQIAAAAZWW91IGFscmVhZHkgb3duIHRoaXMgbmFtZQMJAQAAAAEhAAAAAQkBAAAAEGlzUmVnaXN0ZXJlZE5hbWUAAAABBQAAAARuYW1lCQAAAgAAAAECAAAAFk5hbWUgaXMgbm90IHJlZ2lzdGVyZWQDCQEAAAANaXNFeHBpcmVkTmFtZQAAAAEFAAAABG5hbWUJAAACAAAAAQIAAAAjVGhlIHBlcmlvZCBvZiBvd25lcnNoaXAgaGFzIGV4cGlyZWQDCQAAAAAAAAIJAAPwAAAAAgUAAAAGY2FsbGVyBQAAAAd0b2tlbklkAAAAAAAAAAAACQAAAgAAAAECAAAAHFlvdSBkb24ndCBoYXZlIGEgbmFtZWQgdG9rZW4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleV9OYW1lX293bmVyAAAAAQUAAAAEbmFtZQUAAAAJY2FsbGVyU3RyBQAAAANuaWwAAAAAv0BJzQ==", "height": 2257350, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HXRBWk7aqRpaoZZ6jwwbLoR8RT9CB4v3qcbzcJoJeBER Next: 7t2Vamk4e2H7z63HUMy2u8CyfzM9MrZ5szFMUjqaXsPG Diff:
OldNewDifferences
9494 else false)
9595 then throw("Name already in use")
9696 else {
97- let resFinalize = invoke(auctionAddress, "finalizeOrigin", [name], nil)
9897 let issueNameToken = Issue(if ((size(name) > 16))
9998 then (take(name, 15) + "~")
10099 else take(name, 16), name, 1, 0, false)
102101 let tokenStr = toBase58String(tokenId)
103102 let issueAndRegister = [issueNameToken, StringEntry(key_Name_token(name), tokenStr), StringEntry(key_Token_name(tokenStr), name), IntegerEntry(key_Name_createdAt(name), lastBlock.timestamp), IntegerEntry(key_Name_expiresAt(name), (lastBlock.timestamp + nameExpirationInterval))]
104103 let setOwnershipAndTransfer = [StringEntry(key_Name_owner(name), callerStr), ScriptTransfer(caller, 1, tokenId)]
105- (issueAndRegister ++ setOwnershipAndTransfer)
104+ let finalizeOrigin = invoke(auctionAddress, "finalizeOrigin", [name], nil)
105+ if ((finalizeOrigin == finalizeOrigin))
106+ then (issueAndRegister ++ setOwnershipAndTransfer)
107+ else throw("Strict value is not equal to itself.")
106108 }
107109 }
108110
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
88
99
1010 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1111
1212
1313 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
1414
1515
1616 func key_Token_name (tokenId) = key_entity("Token", tokenId, "name")
1717
1818
1919 func key_Name_token (name) = key_entity("Name", name, "token")
2020
2121
2222 func key_Name_owner (name) = key_entity("Name", name, "owner")
2323
2424
2525 func key_Name_expiresAt (name) = key_entity("Name", name, "expiresAt")
2626
2727
2828 func key_Name_createdAt (name) = key_entity("Name", name, "createdAt")
2929
3030
3131 func key_Owner_name (address) = key_entity("Owner", address, "name")
3232
3333
3434 let key_auctionAddress = "auctionAddress"
3535
3636 let key_nameExpirationInterval = "nameExpirationInterval"
3737
3838 let key_maxAuthorizedFee = "maxAuthorizedFee"
3939
4040 let auctionAddressStr = getStringOrThrow(this, key_auctionAddress)
4141
4242 let auctionAddress = parseAddressOrThrow(auctionAddressStr)
4343
4444 let nameExpirationInterval = getIntegerOrThrow(this, key_nameExpirationInterval)
4545
4646 let maxAuthorizedFee = getIntegerOrThrow(this, key_maxAuthorizedFee)
4747
4848 func whoIs (name) = {
4949 let expiresAt = getIntegerOrThrow(this, key_Name_expiresAt(name))
5050 let token = getStringOrThrow(this, key_Name_token(name))
5151 let owner = getStringOrThrow(this, key_Name_owner(name))
5252 $Tuple3(owner, expiresAt, token)
5353 }
5454
5555
5656 func isRegisteredToken (tokenId) = isDefined(getString(this, key_Token_name(tokenId)))
5757
5858
5959 func isRegisteredName (name) = isDefined(getString(this, key_Name_token(name)))
6060
6161
6262 func isExpiredName (name) = match getInteger(this, key_Name_expiresAt(name)) {
6363 case expiresAt: Int =>
6464 (expiresAt > lastBlock.timestamp)
6565 case _ =>
6666 false
6767 }
6868
6969
7070 @Callable(inv)
7171 func init (auctionAddress,nameExpirationInterval) = if ((inv.caller != this))
7272 then throw("Permission denied")
7373 else [StringEntry(key_auctionAddress, auctionAddress), IntegerEntry(key_nameExpirationInterval, nameExpirationInterval)]
7474
7575
7676
7777 @Callable(inv)
7878 func registerOwnership (name) = {
7979 let caller = inv.caller
8080 let callerStr = toString(caller)
8181 let $t027863041 = match invoke(auctionAddress, "getWinnerInfo", [name], nil) {
8282 case winnerInfo: (Int, String, String) =>
8383 winnerInfo
8484 case _ =>
8585 throw("Unexpected getWinnerInfo result")
8686 }
8787 let winnerAuctionId = $t027863041._1
8888 let winnerAddress = $t027863041._2
8989 let winnerHash = $t027863041._3
9090 if ((callerStr != winnerAddress))
9191 then throw(((("Winner address " + winnerAddress) + "doesn't match with caller address") + callerStr))
9292 else if (if (isRegisteredName(name))
9393 then !(isExpiredName(name))
9494 else false)
9595 then throw("Name already in use")
9696 else {
97- let resFinalize = invoke(auctionAddress, "finalizeOrigin", [name], nil)
9897 let issueNameToken = Issue(if ((size(name) > 16))
9998 then (take(name, 15) + "~")
10099 else take(name, 16), name, 1, 0, false)
101100 let tokenId = calculateAssetId(issueNameToken)
102101 let tokenStr = toBase58String(tokenId)
103102 let issueAndRegister = [issueNameToken, StringEntry(key_Name_token(name), tokenStr), StringEntry(key_Token_name(tokenStr), name), IntegerEntry(key_Name_createdAt(name), lastBlock.timestamp), IntegerEntry(key_Name_expiresAt(name), (lastBlock.timestamp + nameExpirationInterval))]
104103 let setOwnershipAndTransfer = [StringEntry(key_Name_owner(name), callerStr), ScriptTransfer(caller, 1, tokenId)]
105- (issueAndRegister ++ setOwnershipAndTransfer)
104+ let finalizeOrigin = invoke(auctionAddress, "finalizeOrigin", [name], nil)
105+ if ((finalizeOrigin == finalizeOrigin))
106+ then (issueAndRegister ++ setOwnershipAndTransfer)
107+ else throw("Strict value is not equal to itself.")
106108 }
107109 }
108110
109111
110112
111113 @Callable(inv)
112114 func approveOwnership (name) = {
113115 let caller = inv.caller
114116 let callerStr = toString(caller)
115117 let owner = valueOrErrorMessage(getString(this, key_Name_owner(name)), "Owner is not defined")
116118 let tokenStr = valueOrErrorMessage(getString(this, key_Name_token(name)), "No token is issued for this name")
117119 let tokenId = fromBase58String(tokenStr)
118120 let token = match assetInfo(tokenId) {
119121 case a: Asset =>
120122 a
121123 case _ =>
122124 throw("Can't find asset")
123125 }
124126 if ((callerStr == owner))
125127 then throw("You already own this name")
126128 else if (!(isRegisteredName(name)))
127129 then throw("Name is not registered")
128130 else if (isExpiredName(name))
129131 then throw("The period of ownership has expired")
130132 else if ((assetBalance(caller, tokenId) == 0))
131133 then throw("You don't have a named token")
132134 else [StringEntry(key_Name_owner(name), callerStr)]
133135 }
134136
135137

github/deemru/w8io/3ef1775 
51.48 ms