tx · HHb2oHyjwdtddjFooFzFK74SZjUzHXMtVyfpQuF38xBC

3P2NM3bGQMiV4dzY93WfedpHwcvNv9qRQNF:  -0.01400000 Waves

2019.12.25 04:19 [1854237] smart account 3P2NM3bGQMiV4dzY93WfedpHwcvNv9qRQNF > SELF 0.00000000 Waves

{ "type": 13, "id": "HHb2oHyjwdtddjFooFzFK74SZjUzHXMtVyfpQuF38xBC", "fee": 1400000, "feeAssetId": null, "timestamp": 1577236841193, "version": 1, "sender": "3P2NM3bGQMiV4dzY93WfedpHwcvNv9qRQNF", "senderPublicKey": "76QdVGq8frzrD5DEXX2yZC7GQHH1CRyuC5epVEWdr5V8", "proofs": [ "5NYWjtkuNtWn35hLKMug7b5Z7sJ2sC6F1qyMFeCoKx4R9dbTfkdnoY2D5zzJ2bEMrhvUjSzESrTXwtSzFSD7mk5N" ], "script": "base64:AAIDAAAAAAAAABMIARIFCgMICAgSAwoBCBIDCgEIAAAACgAAAAAUZEFwcEFjY291bnRQdWJsaWNLZXkBAAAAIFqIvjwpV/LuigbXAkN2Jzj27wKnZV6iHM0iT+jD0FY3AAAAAAp1c2VyU3VmZml4AgAAAAZfX3VzZXIAAAAAFHVudmVyaWZpZWRVc2VyU3VmZml4AgAAAAxfX3VudmVyaWZpZWQAAAAAEnZlcmlmaWVkVXNlclN1ZmZpeAIAAAAKX192ZXJpZmllZAAAAAAJY2F0ZWdvcnkxAgAAAAphbWJhc3NhZG9yAAAAAAljYXRlZ29yeTICAAAAEmFjdGl2ZSBjb250cmlidXRvcgAAAAAJY2F0ZWdvcnkzAgAAABZjb21tdW5pdHkgcGFydGljaXBhbnRzAQAAAAZpc1VzZXIAAAABAAAAD2NhbGxlclB1YmxpY0tleQQAAAAHdXNlcktleQkAASwAAAACBQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAACnVzZXJTdWZmaXgDCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAd1c2VyS2V5BgcBAAAAD2lzVmFsaWRDYXRlZ29yeQAAAAEAAAAIY2F0ZWdvcnkDAwMJAAAAAAAAAgUAAAAIY2F0ZWdvcnkFAAAACWNhdGVnb3J5MQYJAAAAAAAAAgUAAAAIY2F0ZWdvcnkFAAAACWNhdGVnb3J5MgYJAAAAAAAAAgUAAAAIY2F0ZWdvcnkFAAAACWNhdGVnb3J5MwUAAAAIY2F0ZWdvcnkJAAACAAAAAQIAAAATQ2F0ZWdvcnkgaXMgaW52YWxpZAEAAAAKaXNWZXJpZmllZAAAAAEAAAAJcHVibGljS2V5BAAAAANrZXkJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4BAAAAAd1c2VyS2V5CQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAd1c2VyS2V5BAAAAAh1c2VyRGF0YQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABBSZWNvcmQgbm90IGZvdW5kBAAAAAh1c2VyTGlzdAkABLUAAAACBQAAAAh1c2VyRGF0YQIAAAACX18DCQAAAAAAAAIJAAGRAAAAAgUAAAAIdXNlckxpc3QAAAAAAAAAAAICAAAACHZlcmlmaWVkBgcHAAAAAwAAAAFpAQAAAAZzaWduVXAAAAADAAAABGluZm8AAAAIY2F0ZWdvcnkAAAAJcHVibGljS2V5BAAAAA9jYWxsZXJQdWJsaWNLZXkJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5AwkBAAAABmlzVXNlcgAAAAEFAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABpZb3UgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZAQAAAAKY3VycmVudEtleQUAAAAJcHVibGljS2V5BAAAAAx1c2VyQ2F0ZWdvcnkJAQAAAA9pc1ZhbGlkQ2F0ZWdvcnkAAAABBQAAAAhjYXRlZ29yeQQAAAAcY3VycmVudFVzZXJSZWdpc3RyYXRpb25WYWx1ZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEaW5mbwIAAAACX18FAAAADHVzZXJDYXRlZ29yeQUAAAAUdW52ZXJpZmllZFVzZXJTdWZmaXgJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAKY3VycmVudEtleQUAAAAKdXNlclN1ZmZpeAUAAAAcY3VycmVudFVzZXJSZWdpc3RyYXRpb25WYWx1ZQUAAAADbmlsAAAAAWkBAAAACnZlcmlmeVVzZXIAAAABAAAACXB1YmxpY0tleQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAUZEFwcEFjY291bnRQdWJsaWNLZXkJAAACAAAAAQIAAAAjT25seSBkQXBwIGFjY291bnQgY2FuIHZlcmlmeSBhIHVzZXIDCQEAAAAKaXNWZXJpZmllZAAAAAEFAAAACXB1YmxpY0tleQkAAAIAAAABAgAAACNUaGlzIHVzZXIgaGFzIGFscmVhZHkgYmVlbiB2ZXJpZmllZAMJAQAAAAZpc1VzZXIAAAABBQAAAAlwdWJsaWNLZXkEAAAACHVzZXJEYXRhBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAOVXNlciBub3QgZm91bmQEAAAACHVzZXJMaXN0CQAEtQAAAAIFAAAACHVzZXJEYXRhAgAAAAJfXwQAAAAIdXNlckluZm8JAAGRAAAAAgUAAAAIdXNlckxpc3QAAAAAAAAAAAAEAAAADHVzZXJDYXRlZ29yeQkAAZEAAAACBQAAAAh1c2VyTGlzdAAAAAAAAAAAAQQAAAAQdXBkYXRlZFVzZXJWYWx1ZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAIdXNlckluZm8CAAAAAl9fBQAAAAx1c2VyQ2F0ZWdvcnkFAAAAEnZlcmlmaWVkVXNlclN1ZmZpeAQAAAAHdXNlcktleQkAASwAAAACBQAAAAlwdWJsaWNLZXkFAAAACnVzZXJTdWZmaXgJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAB3VzZXJLZXkFAAAAEHVwZGF0ZWRVc2VyVmFsdWUFAAAAA25pbAkAAAIAAAABAgAAAB1UaGlzIGlzIG5vdCBhIHJlZ2lzdGVyZWQgdXNlcgAAAAFpAQAAAAN0aXAAAAABAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAwkBAAAACmlzVmVyaWZpZWQAAAABBQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAQAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAlwdWJsaWNLZXkJAAJZAAAAAQUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXADCQAAAAAAAAIFAAAACXB1YmxpY0tleQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAFllvdSBjYW4ndCB0aXAgeW91cnNlbGYDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACFjYW4gaG9kbCB3YXZlcyBvbmx5IGF0IHRoZSBtb21lbnQEAAAACXRvdGFsVGlwcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAgAAAAtfX3RvdGFsVGlwcwQAAAAQY3VycmVudFRvdGFsVGlwcwQAAAAHJG1hdGNoMAUAAAAJdG90YWxUaXBzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADG5ld1RvdGFsVGlwcwkAAGQAAAACBQAAABBjdXJyZW50VG90YWxUaXBzAAAAAAAAAAABBAAAAAx0b3RhbFRpcHNLZXkJAAEsAAAAAgUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXACAAAAC19fdG90YWxUaXBzBAAAAA90b3RhbFRpcHNBbW91bnQJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAIAAAARX190b3RhbFRpcHNBbW91bnQEAAAAFmN1cnJlbnRUb3RhbFRpcHNBbW91bnQEAAAAByRtYXRjaDAFAAAAD3RvdGFsVGlwc0Ftb3VudAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABJuZXdUb3RhbFRpcHNBbW91bnQJAABkAAAAAgUAAAAWY3VycmVudFRvdGFsVGlwc0Ftb3VudAgFAAAAB3BheW1lbnQAAAAGYW1vdW50BAAAABJ0b3RhbFRpcHNBbW91bnRLZXkJAAEsAAAAAgUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXACAAAAEV9fdG90YWxUaXBzQW1vdW50CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMdG90YWxUaXBzS2V5BQAAAAxuZXdUb3RhbFRpcHMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEnRvdGFsVGlwc0Ftb3VudEtleQUAAAASbmV3VG90YWxUaXBzQW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAJcHVibGljS2V5CAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAABHVuaXQFAAAAA25pbAkAAAIAAAABAgAAABdZb3UgY2FuJ3QgdGlwIHRoaXMgdXNlcgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABcwUAAAAHJG1hdGNoMAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAFGRBcHBBY2NvdW50UHVibGljS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQAAAABaQUAAAAHJG1hdGNoMAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkHVbacFg==", "chainId": 87, "height": 1854237, "spentComplexity": 0 } View: original | compacted Prev: none Next: Bbt4ohGpWfhxdaWAc3Sm9nkvCPJdbVRvbPm29pipda78 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let dAppAccountPublicKey = base58'76QdVGq8frzrD5DEXX2yZC7GQHH1CRyuC5epVEWdr5V8'
5+
6+let userSuffix = "__user"
7+
8+let unverifiedUserSuffix = "__unverified"
9+
10+let verifiedUserSuffix = "__verified"
11+
12+let category1 = "ambassador"
13+
14+let category2 = "active contributor"
15+
16+let category3 = "community participants"
17+
18+func isUser (callerPublicKey) = {
19+ let userKey = (callerPublicKey + userSuffix)
20+ if (isDefined(getString(this, userKey)))
21+ then true
22+ else false
23+ }
24+
25+
26+func isValidCategory (category) = if (if (if ((category == category1))
27+ then true
28+ else (category == category2))
29+ then true
30+ else (category == category3))
31+ then category
32+ else throw("Category is invalid")
33+
34+
35+func isVerified (publicKey) = {
36+ let key = (publicKey + userSuffix)
37+ let userKey = getString(this, key)
38+ if (isDefined(userKey))
39+ then {
40+ let userData = match getString(this, key) {
41+ case a: String =>
42+ a
43+ case _ =>
44+ throw("Record not found")
45+ }
46+ let userList = split(userData, "__")
47+ if ((userList[2] == "verified"))
48+ then true
49+ else false
50+ }
51+ else false
52+ }
53+
54+
55+@Callable(i)
56+func signUp (info,category,publicKey) = {
57+ let callerPublicKey = toBase58String(i.callerPublicKey)
58+ if (isUser(callerPublicKey))
59+ then throw("You are already registered")
60+ else {
61+ let currentKey = publicKey
62+ let userCategory = isValidCategory(category)
63+ let currentUserRegistrationValue = (((info + "__") + userCategory) + unverifiedUserSuffix)
64+ WriteSet([DataEntry((currentKey + userSuffix), currentUserRegistrationValue)])
65+ }
66+ }
67+
68+
69+
70+@Callable(i)
71+func verifyUser (publicKey) = if ((i.callerPublicKey != dAppAccountPublicKey))
72+ then throw("Only dApp account can verify a user")
73+ else if (isVerified(publicKey))
74+ then throw("This user has already been verified")
75+ else if (isUser(publicKey))
76+ then {
77+ let userData = match getString(this, (publicKey + userSuffix)) {
78+ case a: String =>
79+ a
80+ case _ =>
81+ throw("User not found")
82+ }
83+ let userList = split(userData, "__")
84+ let userInfo = userList[0]
85+ let userCategory = userList[1]
86+ let updatedUserValue = (((userInfo + "__") + userCategory) + verifiedUserSuffix)
87+ let userKey = (publicKey + userSuffix)
88+ WriteSet([DataEntry(userKey, updatedUserValue)])
89+ }
90+ else throw("This is not a registered user")
91+
92+
93+
94+@Callable(i)
95+func tip (publicKeyOfUserToTip) = if (isVerified(publicKeyOfUserToTip))
96+ then {
97+ let payment = extract(i.payment)
98+ let publicKey = fromBase58String(publicKeyOfUserToTip)
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 + "__totalTips")
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+ }
124+ }
125+ else throw("You can't tip this user")
126+
127+
128+@Verifier(tx)
129+func verify () = match tx {
130+ case s: SetScriptTransaction =>
131+ sigVerify(tx.bodyBytes, tx.proofs[0], dAppAccountPublicKey)
132+ case i: InvokeScriptTransaction =>
133+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
134+ case _ =>
135+ false
136+}
137+

github/deemru/w8io/3ef1775 
30.68 ms