tx · Bbt4ohGpWfhxdaWAc3Sm9nkvCPJdbVRvbPm29pipda78

3P2NM3bGQMiV4dzY93WfedpHwcvNv9qRQNF:  -0.01400000 Waves

2019.12.25 05:28 [1854311] smart account 3P2NM3bGQMiV4dzY93WfedpHwcvNv9qRQNF > SELF 0.00000000 Waves

{ "type": 13, "id": "Bbt4ohGpWfhxdaWAc3Sm9nkvCPJdbVRvbPm29pipda78", "fee": 1400000, "feeAssetId": null, "timestamp": 1577240903609, "version": 1, "sender": "3P2NM3bGQMiV4dzY93WfedpHwcvNv9qRQNF", "senderPublicKey": "76QdVGq8frzrD5DEXX2yZC7GQHH1CRyuC5epVEWdr5V8", "proofs": [ "ixPeViQUw9waMoRFmWD8TvgfkXMAw2FVr1KwVSMhGFtd3CYMW4G3Ko3kjAiRyDN4ai6xRHGTQ9cPS8kwAnw3GDi" ], "script": "base64:AAIDAAAAAAAAABIIARIECgIICBIDCgEIEgMKAQgAAAAKAAAAABRkQXBwQWNjb3VudFB1YmxpY0tleQEAAAAgWoi+PClX8u6KBtcCQ3YnOPbvAqdlXqIczSJP6MPQVjcAAAAACnVzZXJTdWZmaXgCAAAABl9fdXNlcgAAAAAUdW52ZXJpZmllZFVzZXJTdWZmaXgCAAAADF9fdW52ZXJpZmllZAAAAAASdmVyaWZpZWRVc2VyU3VmZml4AgAAAApfX3ZlcmlmaWVkAAAAAAljYXRlZ29yeTECAAAACmFtYmFzc2Fkb3IAAAAACWNhdGVnb3J5MgIAAAASYWN0aXZlIGNvbnRyaWJ1dG9yAAAAAAljYXRlZ29yeTMCAAAAFmNvbW11bml0eSBwYXJ0aWNpcGFudHMBAAAABmlzVXNlcgAAAAEAAAAPY2FsbGVyUHVibGljS2V5BAAAAAd1c2VyS2V5CQABLAAAAAIFAAAAD2NhbGxlclB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAB3VzZXJLZXkGBwEAAAAPaXNWYWxpZENhdGVnb3J5AAAAAQAAAAhjYXRlZ29yeQMDAwkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkxBgkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkyBgkAAAAAAAACBQAAAAhjYXRlZ29yeQUAAAAJY2F0ZWdvcnkzBQAAAAhjYXRlZ29yeQkAAAIAAAABAgAAABNDYXRlZ29yeSBpcyBpbnZhbGlkAQAAAAppc1ZlcmlmaWVkAAAAAQAAAAlwdWJsaWNLZXkEAAAAA2tleQkAASwAAAACBQAAAAlwdWJsaWNLZXkFAAAACnVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAB3VzZXJLZXkEAAAACHVzZXJEYXRhBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAEFJlY29yZCBub3QgZm91bmQEAAAACHVzZXJMaXN0CQAEtQAAAAIFAAAACHVzZXJEYXRhAgAAAAJfXwMJAAAAAAAAAgkAAZEAAAACBQAAAAh1c2VyTGlzdAAAAAAAAAAAAgIAAAAIdmVyaWZpZWQGBwcAAAADAAAAAWkBAAAABnNpZ25VcAAAAAIAAAAEaW5mbwAAAAhjYXRlZ29yeQQAAAAPY2FsbGVyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAZpc1VzZXIAAAABBQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAaWW91IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQEAAAACmN1cnJlbnRLZXkFAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMdXNlckNhdGVnb3J5CQEAAAAPaXNWYWxpZENhdGVnb3J5AAAAAQUAAAAIY2F0ZWdvcnkEAAAAHGN1cnJlbnRVc2VyUmVnaXN0cmF0aW9uVmFsdWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABGluZm8CAAAAAl9fBQAAAAx1c2VyQ2F0ZWdvcnkFAAAAFHVudmVyaWZpZWRVc2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACmN1cnJlbnRLZXkFAAAACnVzZXJTdWZmaXgFAAAAHGN1cnJlbnRVc2VyUmVnaXN0cmF0aW9uVmFsdWUFAAAAA25pbAAAAAFpAQAAAAp2ZXJpZnlVc2VyAAAAAQAAAAlwdWJsaWNLZXkDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAFGRBcHBBY2NvdW50UHVibGljS2V5CQAAAgAAAAECAAAAI09ubHkgZEFwcCBhY2NvdW50IGNhbiB2ZXJpZnkgYSB1c2VyAwkBAAAACmlzVmVyaWZpZWQAAAABBQAAAAlwdWJsaWNLZXkJAAACAAAAAQIAAAAjVGhpcyB1c2VyIGhhcyBhbHJlYWR5IGJlZW4gdmVyaWZpZWQDCQEAAAAGaXNVc2VyAAAAAQUAAAAJcHVibGljS2V5BAAAAAh1c2VyRGF0YQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACXB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAADlVzZXIgbm90IGZvdW5kBAAAAAh1c2VyTGlzdAkABLUAAAACBQAAAAh1c2VyRGF0YQIAAAACX18EAAAACHVzZXJJbmZvCQABkQAAAAIFAAAACHVzZXJMaXN0AAAAAAAAAAAABAAAAAx1c2VyQ2F0ZWdvcnkJAAGRAAAAAgUAAAAIdXNlckxpc3QAAAAAAAAAAAEEAAAAEHVwZGF0ZWRVc2VyVmFsdWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACHVzZXJJbmZvAgAAAAJfXwUAAAAMdXNlckNhdGVnb3J5BQAAABJ2ZXJpZmllZFVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAd1c2VyS2V5BQAAABB1cGRhdGVkVXNlclZhbHVlBQAAAANuaWwJAAACAAAAAQIAAAAdVGhpcyBpcyBub3QgYSByZWdpc3RlcmVkIHVzZXIAAAABaQEAAAADdGlwAAAAAQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAMJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXAEAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAJcHVibGljS2V5CQACWQAAAAEFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAwkAAAAAAAACBQAAAAlwdWJsaWNLZXkIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABZZb3UgY2FuJ3QgdGlwIHlvdXJzZWxmAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAhY2FuIGhvZGwgd2F2ZXMgb25seSBhdCB0aGUgbW9tZW50BAAAAAl0b3RhbFRpcHMJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAIAAAALX190b3RhbFRpcHMEAAAAEGN1cnJlbnRUb3RhbFRpcHMEAAAAByRtYXRjaDAFAAAACXRvdGFsVGlwcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAxuZXdUb3RhbFRpcHMJAABkAAAAAgUAAAAQY3VycmVudFRvdGFsVGlwcwAAAAAAAAAAAQQAAAAMdG90YWxUaXBzS2V5CQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAAAtfX3RvdGFsVGlwcwQAAAAPdG90YWxUaXBzQW1vdW50CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXACAAAAEV9fdG90YWxUaXBzQW1vdW50BAAAABZjdXJyZW50VG90YWxUaXBzQW1vdW50BAAAAAckbWF0Y2gwBQAAAA90b3RhbFRpcHNBbW91bnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAASbmV3VG90YWxUaXBzQW1vdW50CQAAZAAAAAIFAAAAFmN1cnJlbnRUb3RhbFRpcHNBbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAASdG90YWxUaXBzQW1vdW50S2V5CQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAABFfX3RvdGFsVGlwc0Ftb3VudAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADHRvdGFsVGlwc0tleQUAAAAMbmV3VG90YWxUaXBzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABJ0b3RhbFRpcHNBbW91bnRLZXkFAAAAEm5ld1RvdGFsVGlwc0Ftb3VudAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAACXB1YmxpY0tleQgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwJAAACAAAAAQIAAAAXWW91IGNhbid0IHRpcCB0aGlzIHVzZXIAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAXMFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAABRkQXBwQWNjb3VudFB1YmxpY0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAAAAAWkFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5B30X+FM=", "chainId": 87, "height": 1854311, "spentComplexity": 0 } View: original | compacted Prev: HHb2oHyjwdtddjFooFzFK74SZjUzHXMtVyfpQuF38xBC Next: none Diff:
OldNewDifferences
5353
5454
5555 @Callable(i)
56-func signUp (info,category,publicKey) = {
56+func signUp (info,category) = {
5757 let callerPublicKey = toBase58String(i.callerPublicKey)
5858 if (isUser(callerPublicKey))
5959 then throw("You are already registered")
6060 else {
61- let currentKey = publicKey
61+ let currentKey = callerPublicKey
6262 let userCategory = isValidCategory(category)
6363 let currentUserRegistrationValue = (((info + "__") + userCategory) + unverifiedUserSuffix)
6464 WriteSet([DataEntry((currentKey + userSuffix), currentUserRegistrationValue)])
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let dAppAccountPublicKey = base58'76QdVGq8frzrD5DEXX2yZC7GQHH1CRyuC5epVEWdr5V8'
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)
56-func signUp (info,category,publicKey) = {
56+func signUp (info,category) = {
5757 let callerPublicKey = toBase58String(i.callerPublicKey)
5858 if (isUser(callerPublicKey))
5959 then throw("You are already registered")
6060 else {
61- let currentKey = publicKey
61+ 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 ((publicKey == i.callerPublicKey))
100100 then throw("You can't tip yourself")
101101 else if (isDefined(payment.assetId))
102102 then throw("can hodl waves only at the moment")
103103 else {
104104 let totalTips = getInteger(this, (publicKeyOfUserToTip + "__totalTips"))
105105 let currentTotalTips = match totalTips {
106106 case a: Int =>
107107 a
108108 case _ =>
109109 0
110110 }
111111 let newTotalTips = (currentTotalTips + 1)
112112 let totalTipsKey = (publicKeyOfUserToTip + "__totalTips")
113113 let totalTipsAmount = getInteger(this, (publicKeyOfUserToTip + "__totalTipsAmount"))
114114 let currentTotalTipsAmount = match totalTipsAmount {
115115 case a: Int =>
116116 a
117117 case _ =>
118118 0
119119 }
120120 let newTotalTipsAmount = (currentTotalTipsAmount + payment.amount)
121121 let totalTipsAmountKey = (publicKeyOfUserToTip + "__totalTipsAmount")
122122 ScriptResult(WriteSet([DataEntry(totalTipsKey, newTotalTips), DataEntry(totalTipsAmountKey, newTotalTipsAmount)]), TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)]))
123123 }
124124 }
125125 else throw("You can't tip this user")
126126
127127
128128 @Verifier(tx)
129129 func verify () = match tx {
130130 case s: SetScriptTransaction =>
131131 sigVerify(tx.bodyBytes, tx.proofs[0], dAppAccountPublicKey)
132132 case i: InvokeScriptTransaction =>
133133 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
134134 case _ =>
135135 false
136136 }
137137

github/deemru/w8io/3ef1775 
67.21 ms