tx · Gwq9wZnbJMaUY6HKgsnkziRWjHX9ZFWzd1CHFDMjTJ3x

3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE:  -0.01400000 Waves

2019.12.18 03:22 [813623] smart account 3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE > SELF 0.00000000 Waves

{ "type": 13, "id": "Gwq9wZnbJMaUY6HKgsnkziRWjHX9ZFWzd1CHFDMjTJ3x", "fee": 1400000, "feeAssetId": null, "timestamp": 1576628539245, "version": 1, "sender": "3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE", "senderPublicKey": "9mENuoC82QFsBookiU4McsBPyUkyY7VNWe8nikxj47eh", "proofs": [ "3w5Zy5Sx1RVptxi2iPFMdLqvAZXuBDw1hyYthCeHu5972GMSnXJzJLjQQuoQjiNhhaVg1GWNcCW6WNHpQjGnv8Jy" ], "script": "base64:AAIDAAAAAAAAABIIARIECgIICBIDCgEIEgMKAQgAAAAKAAAAABRkQXBwQWNjb3VudFB1YmxpY0tleQEAAAAggjItYz1wDPYf7XYzYhDTkZ7oouxwtfQFF4TErvLkmhoAAAAACnVzZXJTdWZmaXgCAAAABl9fdXNlcgAAAAAUdW52ZXJpZmllZFVzZXJTdWZmaXgCAAAADF9fdW52ZXJpZmllZAAAAAASdmVyaWZpZWRVc2VyU3VmZml4AgAAAApfX3ZlcmlmaWVkAAAAAAljYXRlZ29yeTECAAAACmFtYmFzc2Fkb3IAAAAACWNhdGVnb3J5MgIAAAASYWN0aXZlIGNvbnRyaWJ1dG9yAAAAAAljYXRlZ29yeTMCAAAAFmNvbW11bml0eSBwYXJ0aWNpcGFudHMBAAAABmlzVXNlcgAAAAEAAAAPY2FsbGVyUHVibGljS2V5BAAAAAd1c2VyS2V5CQABLAAAAAIFAAAAD2NhbGxlclB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAB3VzZXJLZXkGBwEAAAAPaXNWYWxpZENhdGVnb3J5AAAAAQAAAAhjYXRlZ29yeQMDAwkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkxBgkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkyBgkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkzBQAAAAhjYXRlZ29yeQkAAAIAAAABAgAAABNDYXRlZ29yeSBpcyBpbnZhbGlkAQAAAAppc1ZlcmlmaWVkAAAAAQAAAAlwdWJsaWNLZXkEAAAAA2tleQkAASwAAAACBQAAAAlwdWJsaWNLZXkFAAAACnVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAB3VzZXJLZXkEAAAACHVzZXJEYXRhBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAEFJlY29yZCBub3QgZm91bmQEAAAACHVzZXJMaXN0CQAEtQAAAAIFAAAACHVzZXJEYXRhAgAAAAJfXwMJAAAAAAAAAgkAAZEAAAACBQAAAAh1c2VyTGlzdAAAAAAAAAAAAgIAAAAIdmVyaWZpZWQGBwcAAAADAAAAAWkBAAAABnNpZ25VcAAAAAIAAAAEaW5mbwAAAAhjYXRlZ29yeQQAAAAPY2FsbGVyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAZpc1VzZXIAAAABBQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAaWW91IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQEAAAACmN1cnJlbnRLZXkFAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMdXNlckNhdGVnb3J5CQEAAAAPaXNWYWxpZENhdGVnb3J5AAAAAQUAAAAIY2F0ZWdvcnkEAAAAHGN1cnJlbnRVc2VyUmVnaXN0cmF0aW9uVmFsdWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABGluZm8CAAAAAl9fBQAAAAx1c2VyQ2F0ZWdvcnkFAAAAFHVudmVyaWZpZWRVc2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACmN1cnJlbnRLZXkFAAAACnVzZXJTdWZmaXgFAAAAHGN1cnJlbnRVc2VyUmVnaXN0cmF0aW9uVmFsdWUFAAAAA25pbAAAAAFpAQAAAAp2ZXJpZnlVc2VyAAAAAQAAAAlwdWJsaWNLZXkDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAFGRBcHBBY2NvdW50UHVibGljS2V5CQAAAgAAAAECAAAAI09ubHkgZEFwcCBhY2NvdW50IGNhbiB2ZXJpZnkgYSB1c2VyAwkBAAAACmlzVmVyaWZpZWQAAAABBQAAAAlwdWJsaWNLZXkJAAACAAAAAQIAAAAjVGhpcyB1c2VyIGhhcyBhbHJlYWR5IGJlZW4gdmVyaWZpZWQDCQEAAAAGaXNVc2VyAAAAAQUAAAAJcHVibGljS2V5BAAAAAh1c2VyRGF0YQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACXB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADlVzZXIgbm90IGZvdW5kBAAAAAh1c2VyTGlzdAkABLUAAAACBQAAAAh1c2VyRGF0YQIAAAACX18EAAAACHVzZXJJbmZvCQABkQAAAAIFAAAACHVzZXJMaXN0AAAAAAAAAAAABAAAAAx1c2VyQ2F0ZWdvcnkJAAGRAAAAAgUAAAAIdXNlckxpc3QAAAAAAAAAAAEEAAAAEHVwZGF0ZWRVc2VyVmFsdWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACHVzZXJJbmZvAgAAAAJfXwUAAAAMdXNlckNhdGVnb3J5BQAAABJ2ZXJpZmllZFVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAd1c2VyS2V5BQAAABB1cGRhdGVkVXNlclZhbHVlBQAAAANuaWwJAAACAAAAAQIAAAAdVGhpcyBpcyBub3QgYSByZWdpc3RlcmVkIHVzZXIAAAABaQEAAAADdGlwAAAAAQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAMJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXAEAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAJcHVibGljS2V5CQACWQAAAAEFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAwkAAAAAAAACBQAAAAlwdWJsaWNLZXkIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABZZb3UgY2FuJ3QgdGlwIHlvdXJzZWxmAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAhY2FuIGhvZGwgd2F2ZXMgb25seSBhdCB0aGUgbW9tZW50BAAAAAl0b3RhbFRpcHMJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAIAAAALX190b3RhbFRpcHMEAAAAEGN1cnJlbnRUb3RhbFRpcHMEAAAAByRtYXRjaDAFAAAACXRvdGFsVGlwcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAxuZXdUb3RhbFRpcHMJAABkAAAAAgUAAAAQY3VycmVudFRvdGFsVGlwcwAAAAAAAAAAAQQAAAAMdG90YWxUaXBzS2V5CQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAABFfX3RvdGFsVGlwc0Ftb3VudAQAAAAPdG90YWxUaXBzQW1vdW50CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXACAAAAEV9fdG90YWxUaXBzQW1vdW50BAAAABZjdXJyZW50VG90YWxUaXBzQW1vdW50BAAAAAckbWF0Y2gwBQAAAA90b3RhbFRpcHNBbW91bnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAASbmV3VG90YWxUaXBzQW1vdW50CQAAZAAAAAIFAAAAFmN1cnJlbnRUb3RhbFRpcHNBbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAASdG90YWxUaXBzQW1vdW50S2V5CQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAABFfX3RvdGFsVGlwc0Ftb3VudAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADHRvdGFsVGlwc0tleQUAAAAMbmV3VG90YWxUaXBzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJ0b3RhbFRpcHNBbW91bnRLZXkFAAAAEm5ld1RvdGFsVGlwc0Ftb3VudAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAACXB1YmxpY0tleQgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwJAAACAAAAAQIAAAAXWW91IGNhbid0IHRpcCB0aGlzIHVzZXIAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAXMFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAABRkQXBwQWNjb3VudFB1YmxpY0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAAAAAWkFAAAAByRtYXRjaDAGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwBgc2cY0P", "chainId": 84, "height": 813623, "spentComplexity": 0 } View: original | compacted Prev: Fhd1tEJmq3waujFnsdqoCpNWAVwg58PKsgFnSvofWLfg Next: E7KskFmHXumPBLmqcmoA6uc26sB7E4pYg9sb5NkZeuev Diff:
OldNewDifferences
9696 then {
9797 let payment = extract(i.payment)
9898 let publicKey = fromBase58String(publicKeyOfUserToTip)
99- if (isDefined(payment.assetId))
100- then throw("can hodl waves only at the moment")
101- else {
102- let totalTips = getInteger(this, (publicKeyOfUserToTip + "__totalTips"))
103- let currentTotalTips = match totalTips {
104- case a: Int =>
105- a
106- case _ =>
107- 0
108- }
109- let newTotalTips = (currentTotalTips + 1)
110- let totalTipsKey = (publicKeyOfUserToTip + "__totalTipsAmount")
111- let totalTipsAmount = getInteger(this, (publicKeyOfUserToTip + "__totalTipsAmount"))
112- let currentTotalTipsAmount = match totalTipsAmount {
113- case a: Int =>
114- a
115- case _ =>
116- 0
117- }
118- let newTotalTipsAmount = (currentTotalTipsAmount + payment.amount)
119- let totalTipsAmountKey = (publicKeyOfUserToTip + "__totalTipsAmount")
120- ScriptResult(WriteSet([DataEntry(totalTipsKey, newTotalTips), DataEntry(totalTipsAmountKey, newTotalTipsAmount)]), TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)]))
121- }
99+ if ((publicKey == i.callerPublicKey))
100+ then throw("You can't tip yourself")
101+ else if (isDefined(payment.assetId))
102+ then throw("can hodl waves only at the moment")
103+ else {
104+ let totalTips = getInteger(this, (publicKeyOfUserToTip + "__totalTips"))
105+ let currentTotalTips = match totalTips {
106+ case a: Int =>
107+ a
108+ case _ =>
109+ 0
110+ }
111+ let newTotalTips = (currentTotalTips + 1)
112+ let totalTipsKey = (publicKeyOfUserToTip + "__totalTipsAmount")
113+ let totalTipsAmount = getInteger(this, (publicKeyOfUserToTip + "__totalTipsAmount"))
114+ let currentTotalTipsAmount = match totalTipsAmount {
115+ case a: Int =>
116+ a
117+ case _ =>
118+ 0
119+ }
120+ let newTotalTipsAmount = (currentTotalTipsAmount + payment.amount)
121+ let totalTipsAmountKey = (publicKeyOfUserToTip + "__totalTipsAmount")
122+ ScriptResult(WriteSet([DataEntry(totalTipsKey, newTotalTips), DataEntry(totalTipsAmountKey, newTotalTipsAmount)]), TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)]))
123+ }
122124 }
123125 else throw("You can't tip this user")
124126
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let dAppAccountPublicKey = base58'9mENuoC82QFsBookiU4McsBPyUkyY7VNWe8nikxj47eh'
55
66 let userSuffix = "__user"
77
88 let unverifiedUserSuffix = "__unverified"
99
1010 let verifiedUserSuffix = "__verified"
1111
1212 let category1 = "ambassador"
1313
1414 let category2 = "active contributor"
1515
1616 let category3 = "community participants"
1717
1818 func isUser (callerPublicKey) = {
1919 let userKey = (callerPublicKey + userSuffix)
2020 if (isDefined(getString(this, userKey)))
2121 then true
2222 else false
2323 }
2424
2525
2626 func isValidCategory (category) = if (if (if ((category == category1))
2727 then true
2828 else (category == category2))
2929 then true
3030 else (category == category3))
3131 then category
3232 else throw("Category is invalid")
3333
3434
3535 func isVerified (publicKey) = {
3636 let key = (publicKey + userSuffix)
3737 let userKey = getString(this, key)
3838 if (isDefined(userKey))
3939 then {
4040 let userData = match getString(this, key) {
4141 case a: String =>
4242 a
4343 case _ =>
4444 throw("Record not found")
4545 }
4646 let userList = split(userData, "__")
4747 if ((userList[2] == "verified"))
4848 then true
4949 else false
5050 }
5151 else false
5252 }
5353
5454
5555 @Callable(i)
5656 func signUp (info,category) = {
5757 let callerPublicKey = toBase58String(i.callerPublicKey)
5858 if (isUser(callerPublicKey))
5959 then throw("You are already registered")
6060 else {
6161 let currentKey = callerPublicKey
6262 let userCategory = isValidCategory(category)
6363 let currentUserRegistrationValue = (((info + "__") + userCategory) + unverifiedUserSuffix)
6464 WriteSet([DataEntry((currentKey + userSuffix), currentUserRegistrationValue)])
6565 }
6666 }
6767
6868
6969
7070 @Callable(i)
7171 func verifyUser (publicKey) = if ((i.callerPublicKey != dAppAccountPublicKey))
7272 then throw("Only dApp account can verify a user")
7373 else if (isVerified(publicKey))
7474 then throw("This user has already been verified")
7575 else if (isUser(publicKey))
7676 then {
7777 let userData = match getString(this, (publicKey + userSuffix)) {
7878 case a: String =>
7979 a
8080 case _ =>
8181 throw("User not found")
8282 }
8383 let userList = split(userData, "__")
8484 let userInfo = userList[0]
8585 let userCategory = userList[1]
8686 let updatedUserValue = (((userInfo + "__") + userCategory) + verifiedUserSuffix)
8787 let userKey = (publicKey + userSuffix)
8888 WriteSet([DataEntry(userKey, updatedUserValue)])
8989 }
9090 else throw("This is not a registered user")
9191
9292
9393
9494 @Callable(i)
9595 func tip (publicKeyOfUserToTip) = if (isVerified(publicKeyOfUserToTip))
9696 then {
9797 let payment = extract(i.payment)
9898 let publicKey = fromBase58String(publicKeyOfUserToTip)
99- if (isDefined(payment.assetId))
100- then throw("can hodl waves only at the moment")
101- else {
102- let totalTips = getInteger(this, (publicKeyOfUserToTip + "__totalTips"))
103- let currentTotalTips = match totalTips {
104- case a: Int =>
105- a
106- case _ =>
107- 0
108- }
109- let newTotalTips = (currentTotalTips + 1)
110- let totalTipsKey = (publicKeyOfUserToTip + "__totalTipsAmount")
111- let totalTipsAmount = getInteger(this, (publicKeyOfUserToTip + "__totalTipsAmount"))
112- let currentTotalTipsAmount = match totalTipsAmount {
113- case a: Int =>
114- a
115- case _ =>
116- 0
117- }
118- let newTotalTipsAmount = (currentTotalTipsAmount + payment.amount)
119- let totalTipsAmountKey = (publicKeyOfUserToTip + "__totalTipsAmount")
120- ScriptResult(WriteSet([DataEntry(totalTipsKey, newTotalTips), DataEntry(totalTipsAmountKey, newTotalTipsAmount)]), TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)]))
121- }
99+ if ((publicKey == i.callerPublicKey))
100+ then throw("You can't tip yourself")
101+ else if (isDefined(payment.assetId))
102+ then throw("can hodl waves only at the moment")
103+ else {
104+ let totalTips = getInteger(this, (publicKeyOfUserToTip + "__totalTips"))
105+ let currentTotalTips = match totalTips {
106+ case a: Int =>
107+ a
108+ case _ =>
109+ 0
110+ }
111+ let newTotalTips = (currentTotalTips + 1)
112+ let totalTipsKey = (publicKeyOfUserToTip + "__totalTipsAmount")
113+ let totalTipsAmount = getInteger(this, (publicKeyOfUserToTip + "__totalTipsAmount"))
114+ let currentTotalTipsAmount = match totalTipsAmount {
115+ case a: Int =>
116+ a
117+ case _ =>
118+ 0
119+ }
120+ let newTotalTipsAmount = (currentTotalTipsAmount + payment.amount)
121+ let totalTipsAmountKey = (publicKeyOfUserToTip + "__totalTipsAmount")
122+ ScriptResult(WriteSet([DataEntry(totalTipsKey, newTotalTips), DataEntry(totalTipsAmountKey, newTotalTipsAmount)]), TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)]))
123+ }
122124 }
123125 else throw("You can't tip this user")
124126
125127
126128 @Verifier(tx)
127129 func verify () = match tx {
128130 case s: SetScriptTransaction =>
129131 sigVerify(tx.bodyBytes, tx.proofs[0], dAppAccountPublicKey)
130132 case i: InvokeScriptTransaction =>
131133 true
132134 case t: TransferTransaction =>
133135 true
134136 case _ =>
135137 false
136138 }
137139

github/deemru/w8io/3ef1775 
55.94 ms