tx · 2zZRx3c2wBPGDetPLrtMP2Gdokb7TqH83Wuu4Pnb2ZCG

3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE:  -0.01400000 Waves

2019.12.13 16:31 [807153] smart account 3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE > SELF 0.00000000 Waves

{ "type": 13, "id": "2zZRx3c2wBPGDetPLrtMP2Gdokb7TqH83Wuu4Pnb2ZCG", "fee": 1400000, "feeAssetId": null, "timestamp": 1576243864123, "version": 1, "sender": "3N9EXJ2Y7szbSfrxUwhWxnL3zK8wf3xosDE", "senderPublicKey": "9mENuoC82QFsBookiU4McsBPyUkyY7VNWe8nikxj47eh", "proofs": [ "3tpLn4P66Bpmr7q8cUySkozcsa6KJEMvjUe5g5LQwiZPu3vYMqbK6PBzZvsfzCtYTLCh2biAgCGvLZfFzKkEVjCR" ], "script": "base64:AAIDAAAAAAAAABEIARIDCgEIEgMKAQgSAwoBCAAAAAYAAAAAFGRBcHBBY2NvdW50UHVibGljS2V5AQAAACCCMi1jPXAM9h/tdjNiENORnuii7HC19AUXhMSu8uSaGgAAAAAKdXNlclN1ZmZpeAIAAAAFX3VzZXIAAAAAFHVudmVyaWZpZWRVc2VyU3VmZml4AgAAAAtfdW52ZXJpZmllZAAAAAASdmVyaWZpZWRVc2VyU3VmZml4AgAAAAlfdmVyaWZpZWQBAAAABmlzVXNlcgAAAAEAAAAPY2FsbGVyUHVibGljS2V5BAAAAAd1c2VyS2V5CQABLAAAAAIFAAAAD2NhbGxlclB1YmxpY0tleQUAAAAKdXNlclN1ZmZpeAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAB3VzZXJLZXkGBwEAAAAKaXNWZXJpZmllZAAAAAEAAAAJcHVibGljS2V5BAAAAANrZXkJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4BAAAAAd1c2VyS2V5CQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAd1c2VyS2V5BAAAAAh1c2VyRGF0YQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABBSZWNvcmQgbm90IGZvdW5kBAAAAAh1c2VyTGlzdAkABLUAAAACBQAAAAh1c2VyRGF0YQIAAAABXwMJAAAAAAAAAgkAAZEAAAACBQAAAAh1c2VyTGlzdAAAAAAAAAAAAQIAAAAIdmVyaWZpZWQGBwcAAAADAAAAAWkBAAAABnNpZ25VcAAAAAEAAAAEaW5mbwQAAAAPY2FsbGVyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQMJAQAAAAZpc1VzZXIAAAABBQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAaWW91IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQEAAAACmN1cnJlbnRLZXkFAAAAD2NhbGxlclB1YmxpY0tleQQAAAAcY3VycmVudFVzZXJSZWdpc3RyYXRpb25WYWx1ZQkAASwAAAACBQAAAARpbmZvBQAAABR1bnZlcmlmaWVkVXNlclN1ZmZpeAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAApjdXJyZW50S2V5BQAAAAp1c2VyU3VmZml4BQAAABxjdXJyZW50VXNlclJlZ2lzdHJhdGlvblZhbHVlBQAAAANuaWwAAAABaQEAAAAKdmVyaWZ5VXNlcgAAAAEAAAAJcHVibGljS2V5AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAABRkQXBwQWNjb3VudFB1YmxpY0tleQkAAAIAAAABAgAAACNPbmx5IGRBcHAgYWNjb3VudCBjYW4gdmVyaWZ5IGEgdXNlcgMJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAJcHVibGljS2V5CQAAAgAAAAECAAAAI1RoaXMgdXNlciBoYXMgYWxyZWFkeSBiZWVuIHZlcmlmaWVkAwkBAAAABmlzVXNlcgAAAAEFAAAACXB1YmxpY0tleQQAAAAIdXNlckRhdGEEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlwdWJsaWNLZXkFAAAACnVzZXJTdWZmaXgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAAA5Vc2VyIG5vdCBmb3VuZAQAAAAIdXNlckxpc3QJAAS1AAAAAgUAAAAIdXNlckRhdGECAAAAAV8EAAAACHVzZXJJbmZvCQABkQAAAAIFAAAACHVzZXJMaXN0AAAAAAAAAAAABAAAABB1cGRhdGVkVXNlclZhbHVlCQABLAAAAAIFAAAACHVzZXJJbmZvBQAAABJ2ZXJpZmllZFVzZXJTdWZmaXgEAAAAB3VzZXJLZXkJAAEsAAAAAgUAAAAJcHVibGljS2V5BQAAAAp1c2VyU3VmZml4CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAd1c2VyS2V5BQAAABB1cGRhdGVkVXNlclZhbHVlBQAAAANuaWwJAAACAAAAAQIAAAAdVGhpcyBpcyBub3QgYSByZWdpc3RlcmVkIHVzZXIAAAABaQEAAAADdGlwAAAAAQAAABRwdWJsaWNLZXlPZlVzZXJUb1RpcAMJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAAUcHVibGljS2V5T2ZVc2VyVG9UaXAEAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAJcHVibGljS2V5CQABmwAAAAEFAAAAFHB1YmxpY0tleU9mVXNlclRvVGlwAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAhY2FuIGhvZGwgd2F2ZXMgb25seSBhdCB0aGUgbW9tZW50CQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAACXB1YmxpY0tleQgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwJAAACAAAAAQIAAAAXWW91IGNhbid0IHRpcCB0aGlzIHVzZXIAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAXMFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAABRkQXBwQWNjb3VudFB1YmxpY0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAAAAAWkFAAAAByRtYXRjaDAGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAF0BQAAAAckbWF0Y2gwBgeQMuye", "chainId": 84, "height": 807153, "spentComplexity": 0 } View: original | compacted Prev: none Next: 8r9M3r8zM27taG3cdHT8cJq1RGDmpkyDwWs1GLa2iAXZ Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let dAppAccountPublicKey = base58'9mENuoC82QFsBookiU4McsBPyUkyY7VNWe8nikxj47eh'
5+
6+let userSuffix = "_user"
7+
8+let unverifiedUserSuffix = "_unverified"
9+
10+let verifiedUserSuffix = "_verified"
11+
12+func isUser (callerPublicKey) = {
13+ let userKey = (callerPublicKey + userSuffix)
14+ if (isDefined(getString(this, userKey)))
15+ then true
16+ else false
17+ }
18+
19+
20+func isVerified (publicKey) = {
21+ let key = (publicKey + userSuffix)
22+ let userKey = getString(this, key)
23+ if (isDefined(userKey))
24+ then {
25+ let userData = match getString(this, key) {
26+ case a: String =>
27+ a
28+ case _ =>
29+ throw("Record not found")
30+ }
31+ let userList = split(userData, "_")
32+ if ((userList[1] == "verified"))
33+ then true
34+ else false
35+ }
36+ else false
37+ }
38+
39+
40+@Callable(i)
41+func signUp (info) = {
42+ let callerPublicKey = toBase58String(i.callerPublicKey)
43+ if (isUser(callerPublicKey))
44+ then throw("You are already registered")
45+ else {
46+ let currentKey = callerPublicKey
47+ let currentUserRegistrationValue = (info + unverifiedUserSuffix)
48+ WriteSet([DataEntry((currentKey + userSuffix), currentUserRegistrationValue)])
49+ }
50+ }
51+
52+
53+
54+@Callable(i)
55+func verifyUser (publicKey) = if ((i.callerPublicKey != dAppAccountPublicKey))
56+ then throw("Only dApp account can verify a user")
57+ else if (isVerified(publicKey))
58+ then throw("This user has already been verified")
59+ else if (isUser(publicKey))
60+ then {
61+ let userData = match getString(this, (publicKey + userSuffix)) {
62+ case a: String =>
63+ a
64+ case _ =>
65+ throw("User not found")
66+ }
67+ let userList = split(userData, "_")
68+ let userInfo = userList[0]
69+ let updatedUserValue = (userInfo + verifiedUserSuffix)
70+ let userKey = (publicKey + userSuffix)
71+ WriteSet([DataEntry(userKey, updatedUserValue)])
72+ }
73+ else throw("This is not a registered user")
74+
75+
76+
77+@Callable(i)
78+func tip (publicKeyOfUserToTip) = if (isVerified(publicKeyOfUserToTip))
79+ then {
80+ let payment = extract(i.payment)
81+ let publicKey = toBytes(publicKeyOfUserToTip)
82+ if (isDefined(payment.assetId))
83+ then throw("can hodl waves only at the moment")
84+ else TransferSet([ScriptTransfer(addressFromPublicKey(publicKey), payment.amount, unit)])
85+ }
86+ else throw("You can't tip this user")
87+
88+
89+@Verifier(tx)
90+func verify () = match tx {
91+ case s: SetScriptTransaction =>
92+ sigVerify(tx.bodyBytes, tx.proofs[0], dAppAccountPublicKey)
93+ case i: InvokeScriptTransaction =>
94+ true
95+ case t: TransferTransaction =>
96+ true
97+ case _ =>
98+ false
99+}
100+

github/deemru/w8io/3ef1775 
39.77 ms