tx · 2uJh93REcqJ2J4TQsqzSY6iexeuPtpxs1LBQ9tBj1RYu

3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE:  -0.01400000 Waves

2019.12.18 03:12 [813613] smart account 3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE > SELF 0.00000000 Waves

{ "type": 13, "id": "2uJh93REcqJ2J4TQsqzSY6iexeuPtpxs1LBQ9tBj1RYu", "fee": 1400000, "feeAssetId": null, "timestamp": 1576627963715, "version": 1, "sender": "3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE", "senderPublicKey": "9mENuoC82QFsBookiU4McsBPyUkyY7VNWe8nikxj47eh", "proofs": [ "5GjpMHVvUR3WevHfxzGZ1okZdcUjUpK8X2roKmHaY3pii4ZvCzAY9SsYYwpX4ji7wm4HMzzSh8vtNmEpe2Q5NJRG" ], "script": "base64:AAIDAAAAAAAAABIIARIECgIICBIDCgEIEgMKAQgAAAAKAAAAABRkQXBwQWNjb3VudFB1YmxpY0tleQEAAAAggjItYz1wDPYf7XYzYhDTkZ7oouxwtfQFF4TErvLkmhoAAAAACnVzZXJTdWZmaXgCAAAABl9fdXNlcgAAAAAUdW52ZXJpZmllZFVzZXJTdWZmaXgCAAAADF9fdW52ZXJpZmllZAAAAAASdmVyaWZpZWRVc2VyU3VmZml4AgAAAApfX3ZlcmlmaWVkAAAAAAljYXRlZ29yeTECAAAACmFtYmFzc2Fkb3IAAAAACWNhdGVnb3J5MgIAAAASYWN0aXZlIGNvbnRyaWJ1dG9yAAAAAAljYXRlZ29yeTMCAAAAFmNvbW11bml0eSBwYXJ0aWNpcGFudHMBAAAABmlzVXNlcgAAAAEAAAAPY2FsbGVyUHVibGljS2V5BAAAAAd1c2VyS2V5CQABLAAAAAIFAAAAD2NhbGxlclB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAB3VzZXJLZXkGBwEAAAAPaXNWYWxpZENhdGVnb3J5AAAAAQAAAAhjYXRlZ29yeQMDAwkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkxBgkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkyBgkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkzBQAAAAhjYXRlZ29yeQkAAAIAAAABAgAAABNDYXRlZ29yeSBpcyBpbnZhbGlkAQAAAAppc1ZlcmlmaWVkAAAAAQAAAAlwdWJsaWNLZXkEAAAAA2tleQkAASwAAAACBQAAAAlwdWJsaWNLZXkFAAAACnVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAB3VzZXJLZXkEAAAACHVzZXJEYXRhBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAEFJlY29yZCBub3QgZm91bmQEAAAACHVzZXJMaXN0CQAEtQAAAAIFAAAACHVzZXJEYXRhAgAAAAJfXwMJAAAAAAAAAgkAAZEAAAACBQAAAAh1c2VyTGlzdAAAAAAAAAAAAgIAAAAIdmVyaWZpZWQGBwcAAAADAAAAAWkBAAAABnNpZ25VcAAAAAIAAAAEaW5mbwAAAAhjYXRlZ29yeQQAAAAPY2FsbGVyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAZpc1VzZXIAAAABBQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAaWW91IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQEAAAACmN1cnJlbnRLZXkFAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMdXNlckNhdGVnb3J5CQEAAAAPaXNWYWxpZENhdGVnb3J5AAAAAQUAAAAIY2F0ZWdvcnkEAAAAHGN1cnJlbnRVc2VyUmVnaXN0cmF0aW9uVmFsdWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABGluZm8CAAAAAl9fBQAAAAx1c2VyQ2F0ZWdvcnkFAAAAFHVudmVyaWZpZWRVc2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACmN1cnJlbnRLZXkFAAAACnVzZXJTdWZmaXgFAAAAHGN1cnJlbnRVc2VyUmVnaXN0cmF0aW9uVmFsdWUFAAAAA25pbAAAAAFpAQAAAAp2ZXJpZnlVc2VyAAAAAQAAAAlwdWJsaWNLZXkDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAFGRBcHBBY2NvdW50UHVibGljS2V5CQAAAgAAAAECAAAAI09ubHkgZEFwcCBhY2NvdW50IGNhbiB2ZXJpZnkgYSB1c2VyAwkBAAAACmlzVmVyaWZpZWQAAAABBQAAAAlwdWJsaWNLZXkJAAACAAAAAQIAAAAjVGhpcyB1c2VyIGhhcyBhbHJlYWR5IGJlZW4gdmVyaWZpZWQDCQEAAAAGaXNVc2VyAAAAAQUAAAAJcHVibGljS2V5BAAAAAh1c2VyRGF0YQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACXB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADlVzZXIgbm90IGZvdW5kBAAAAAh1c2VyTGlzdAkABLUAAAACBQAAAAh1c2VyRGF0YQIAAAACX18EAAAACHVzZXJJbmZvCQABkQAAAAIFAAAACHVzZXJMaXN0AAAAAAAAAAAABAAAAAx1c2VyQ2F0ZWdvcnkJAAGRAAAAAgUAAAAIdXNlckxpc3QAAAAAAAAAAAEEAAAAEHVwZGF0ZWRVc2VyVmFsdWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACHVzZXJJbmZvAgAAAAJfXwUAAAAMdXNlckNhdGVnb3J5BQAAABJ2ZXJpZmllZFVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAd1c2VyS2V5BQAAABB1cGRhdGVkVXNlclZhbHVlBQAAAANuaWwJAAACAAAAAQIAAAAdVGhpcyBpcyBub3QgYSByZWdpc3RlcmVkIHVzZXIAAAABaQEAAAADdGlwAAAAAQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAMJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXAEAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAJcHVibGljS2V5CQACWQAAAAEFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAhY2FuIGhvZGwgd2F2ZXMgb25seSBhdCB0aGUgbW9tZW50BAAAAAl0b3RhbFRpcHMJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAIAAAALX190b3RhbFRpcHMEAAAAEGN1cnJlbnRUb3RhbFRpcHMEAAAAByRtYXRjaDAFAAAACXRvdGFsVGlwcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAxuZXdUb3RhbFRpcHMJAABkAAAAAgUAAAAQY3VycmVudFRvdGFsVGlwcwAAAAAAAAAAAQQAAAAMdG90YWxUaXBzS2V5CQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAABFfX3RvdGFsVGlwc0Ftb3VudAQAAAAPdG90YWxUaXBzQW1vdW50CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXACAAAAEV9fdG90YWxUaXBzQW1vdW50BAAAABZjdXJyZW50VG90YWxUaXBzQW1vdW50BAAAAAckbWF0Y2gwBQAAAAl0b3RhbFRpcHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAASbmV3VG90YWxUaXBzQW1vdW50CQAAZAAAAAIFAAAAFmN1cnJlbnRUb3RhbFRpcHNBbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAASdG90YWxUaXBzQW1vdW50S2V5CQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAABFfX3RvdGFsVGlwc0Ftb3VudAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADHRvdGFsVGlwc0tleQUAAAAMbmV3VG90YWxUaXBzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJ0b3RhbFRpcHNBbW91bnRLZXkFAAAAEm5ld1RvdGFsVGlwc0Ftb3VudAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAACXB1YmxpY0tleQgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwJAAACAAAAAQIAAAAXWW91IGNhbid0IHRpcCB0aGlzIHVzZXIAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAXMFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAABRkQXBwQWNjb3VudFB1YmxpY0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAAAAAWkFAAAAByRtYXRjaDAGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwBgcxLdrB", "chainId": 84, "height": 813613, "spentComplexity": 0 } View: original | compacted Prev: FPF1aNfEQr99RtbzTNXewpR64ugwPYBR5PUTy6euZPaz Next: Fhd1tEJmq3waujFnsdqoCpNWAVwg58PKsgFnSvofWLfg Diff:
OldNewDifferences
9898 let publicKey = fromBase58String(publicKeyOfUserToTip)
9999 if (isDefined(payment.assetId))
100100 then throw("can hodl waves only at the moment")
101- else TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)])
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 totalTips {
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+ }
102122 }
103123 else throw("You can't tip this user")
104124
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)
9999 if (isDefined(payment.assetId))
100100 then throw("can hodl waves only at the moment")
101- else TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)])
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 totalTips {
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+ }
102122 }
103123 else throw("You can't tip this user")
104124
105125
106126 @Verifier(tx)
107127 func verify () = match tx {
108128 case s: SetScriptTransaction =>
109129 sigVerify(tx.bodyBytes, tx.proofs[0], dAppAccountPublicKey)
110130 case i: InvokeScriptTransaction =>
111131 true
112132 case t: TransferTransaction =>
113133 true
114134 case _ =>
115135 false
116136 }
117137

github/deemru/w8io/3ef1775 
39.98 ms