tx · AqcfcjinWSqSNbvVxE1a3QMdi27d8KV53gEk88JwBBgC

3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G:  -0.01000000 Waves

2022.12.21 17:39 [3435645] smart account 3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G > SELF 0.00000000 Waves

{ "type": 13, "id": "AqcfcjinWSqSNbvVxE1a3QMdi27d8KV53gEk88JwBBgC", "fee": 1000000, "feeAssetId": null, "timestamp": 1671633584880, "version": 2, "chainId": 87, "sender": "3PMSUpFkaCwVobF57gkNgQMtpz9hnRMaY3G", "senderPublicKey": "24RfWVqC3utDSKA5GoSKJCJo5mFErm1aABFhpavJYbpW", "proofs": [ "2ZJBrGaQpNwqKUAZRZZwvgYvq8jmrmUQuNL88zNAqohoKqRB9UYN8MWSfikekHWvBKZrM8rAASfPQyktvtgvPKU8" ], "script": "base64:AAIFAAAAAAAAAA4IAhIECgIICBIECgIIAQAAAAsBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbid0IHJlYWQgJwUAAAADa2V5AgAAAA0nIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAAB2FkZHJlc3MBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABAAAADG1heWJlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADG1heWJlQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAGkNhbid0IHBhcnNlIGFkZHJlc3MgZnJvbSAnBQAAAAxtYXliZUFkZHJlc3MCAAAAAScBAAAACmtleV9lbnRpdHkAAAADAAAABG5hbWUAAAACcGsAAAAIcHJvcGVydHkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEbmFtZQIAAAABXwUAAAACcGsCAAAAAV8FAAAACHByb3BlcnR5AQAAAA5rZXlfTmFtZV90b2tlbgAAAAEAAAAEbmFtZQkBAAAACmtleV9lbnRpdHkAAAADAgAAAAROYW1lBQAAAARuYW1lAgAAAAV0b2tlbgAAAAARa2V5X21lZWR1c0FkZHJlc3MCAAAADW1lZWR1c0FkZHJlc3MAAAAAFGtleV9yZWdpc3RyYXJBZGRyZXNzAgAAABByZWdpc3RyYXJBZGRyZXNzAAAAAA1tZWVkdXNBZGRyZXNzCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMFAAAAEWtleV9tZWVkdXNBZGRyZXNzAAAAAAZtZWVkdXMJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQUAAAANbWVlZHVzQWRkcmVzcwAAAAAQcmVnaXN0cmFyQWRkcmVzcwkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzBQAAABRrZXlfcmVnaXN0cmFyQWRkcmVzcwAAAAAJcmVnaXN0cmFyCQEAAAATcGFyc2VBZGRyZXNzT3JUaHJvdwAAAAEFAAAAEHJlZ2lzdHJhckFkZHJlc3MAAAACAAAAA2ludgEAAAAEaW5pdAAAAAIAAAANbWVlZHVzQWRkcmVzcwAAABByZWdpc3RyYXJBZGRyZXNzAwkBAAAAAiE9AAAAAggFAAAAA2ludgAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAbT25seSBzZWxmIGNhbGxzIGFyZSBhbGxvd2VkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEWtleV9tZWVkdXNBZGRyZXNzBQAAAA1tZWVkdXNBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFGtleV9yZWdpc3RyYXJBZGRyZXNzBQAAABByZWdpc3RyYXJBZGRyZXNzBQAAAANuaWwAAAADaW52AQAAAAdyZXNlcnZlAAAAAgAAAARuYW1lAAAADWluaXRUaW1lc3RhbXAEAAAABmNhbGxlcggFAAAAA2ludgAAAAZjYWxsZXIEAAAACWNhbGxlclN0cgkABCUAAAABBQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAAR0aGlzBQAAAAZjYWxsZXIJAAACAAAAAQIAAAAbT25seSBzZWxmIGNhbGxzIGFyZSBhbGxvd2VkBAAAAAtyZXNlcnZhdGlvbgkAA/wAAAAEBQAAAAlyZWdpc3RyYXICAAAACHJlZ2lzdGVyCQAETAAAAAIFAAAABG5hbWUJAARMAAAAAgUAAAAJY2FsbGVyU3RyCQAETAAAAAIFAAAADWluaXRUaW1lc3RhbXAFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAtyZXNlcnZhdGlvbgUAAAALcmVzZXJ2YXRpb24FAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAttYXliZU9yYWNsZQkABCYAAAABCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMCAAAABk9yYWNsZQIAAAAABAAAAA5tYXliZUFkbWluS2V5cwMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAttYXliZU9yYWNsZQkABB0AAAACCQEAAAAFdmFsdWUAAAABBQAAAAttYXliZU9yYWNsZQIAAAAJQWRtaW5LZXlzBQAAAAR1bml0BAAAAAckbWF0Y2gwBQAAAA5tYXliZUFkbWluS2V5cwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAxhZG1pbktleXNTdHIFAAAAByRtYXRjaDAEAAAACWFkbWluS2V5cwQAAAAKc3RyaW5nS2V5cwkABLUAAAACBQAAAAxhZG1pbktleXNTdHICAAAAASwJAARMAAAAAgkAAlkAAAABCQABkQAAAAIFAAAACnN0cmluZ0tleXMAAAAAAAAAAAAJAARMAAAAAgkAAlkAAAABCQABkQAAAAIFAAAACnN0cmluZ0tleXMAAAAAAAAAAAEJAARMAAAAAgkAAlkAAAABCQABkQAAAAIFAAAACnN0cmluZ0tleXMAAAAAAAAAAAIFAAAAA25pbAoBAAAAD3ZlcmlmeUJ5QWxsS2V5cwAAAAEAAAAFcHJvb2YDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMFAAAABXByb29mCQABkQAAAAIFAAAACWFkbWluS2V5cwAAAAAAAAAAAAAAAAAAAAAAAQMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwUAAAAFcHJvb2YJAAGRAAAAAgUAAAAJYWRtaW5LZXlzAAAAAAAAAAABAAAAAAAAAAAKAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzBQAAAAVwcm9vZgkAAZEAAAACBQAAAAlhZG1pbktleXMAAAAAAAAAAAIAAAAAAAAAAGQAAAAAAAAAAAAJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIAAAAAAAAAAG4JAARMAAAAAgAAAAAAAAAAZQkABEwAAAACAAAAAAAAAAALBQAAAANuaWwJAABkAAAAAgkBAAAAD3ZlcmlmeUJ5QWxsS2V5cwAAAAEJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkBAAAAD3ZlcmlmeUJ5QWxsS2V5cwAAAAEJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkvLL4+", "height": 3435645, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CejLubHCxZXbtwKSGUgkzXrShVsJ7gPungDxajsbFHWE Next: 3mWcGnJ3aCzp2G2XAFqr6j6oToAnhcrgDb9txwMeX1oR Diff:
OldNewDifferences
5050 }
5151
5252
53+@Verifier(tx)
54+func verify () = {
55+ let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
56+ let maybeAdminKeys = if (isDefined(maybeOracle))
57+ then getString(value(maybeOracle), "AdminKeys")
58+ else unit
59+ match maybeAdminKeys {
60+ case adminKeysStr: String =>
61+ let adminKeys = {
62+ let stringKeys = split(adminKeysStr, ",")
63+[fromBase58String(stringKeys[0]), fromBase58String(stringKeys[1]), fromBase58String(stringKeys[2])]
64+ }
65+ func verifyByAllKeys (proof) = if (sigVerify(tx.bodyBytes, proof, adminKeys[0]))
66+ then 1
67+ else if (sigVerify(tx.bodyBytes, proof, adminKeys[1]))
68+ then 10
69+ else if (sigVerify(tx.bodyBytes, proof, adminKeys[2]))
70+ then 100
71+ else 0
72+
73+ containsElement([110, 101, 11], (verifyByAllKeys(tx.proofs[0]) + verifyByAllKeys(tx.proofs[1])))
74+ case _ =>
75+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
76+ }
77+ }
78+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
88
99
1010 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1111
1212
1313 func key_entity (name,pk,property) = ((((name + "_") + pk) + "_") + property)
1414
1515
1616 func key_Name_token (name) = key_entity("Name", name, "token")
1717
1818
1919 let key_meedusAddress = "meedusAddress"
2020
2121 let key_registrarAddress = "registrarAddress"
2222
2323 let meedusAddress = getStringOrThrow(this, key_meedusAddress)
2424
2525 let meedus = parseAddressOrThrow(meedusAddress)
2626
2727 let registrarAddress = getStringOrThrow(this, key_registrarAddress)
2828
2929 let registrar = parseAddressOrThrow(registrarAddress)
3030
3131 @Callable(inv)
3232 func init (meedusAddress,registrarAddress) = if ((inv.caller != this))
3333 then throw("Only self calls are allowed")
3434 else [StringEntry(key_meedusAddress, meedusAddress), StringEntry(key_registrarAddress, registrarAddress)]
3535
3636
3737
3838 @Callable(inv)
3939 func reserve (name,initTimestamp) = {
4040 let caller = inv.caller
4141 let callerStr = toString(caller)
4242 if ((this != caller))
4343 then throw("Only self calls are allowed")
4444 else {
4545 let reservation = invoke(registrar, "register", [name, callerStr, initTimestamp], nil)
4646 if ((reservation == reservation))
4747 then nil
4848 else throw("Strict value is not equal to itself.")
4949 }
5050 }
5151
5252
53+@Verifier(tx)
54+func verify () = {
55+ let maybeOracle = addressFromString(valueOrElse(getString(this, "Oracle"), ""))
56+ let maybeAdminKeys = if (isDefined(maybeOracle))
57+ then getString(value(maybeOracle), "AdminKeys")
58+ else unit
59+ match maybeAdminKeys {
60+ case adminKeysStr: String =>
61+ let adminKeys = {
62+ let stringKeys = split(adminKeysStr, ",")
63+[fromBase58String(stringKeys[0]), fromBase58String(stringKeys[1]), fromBase58String(stringKeys[2])]
64+ }
65+ func verifyByAllKeys (proof) = if (sigVerify(tx.bodyBytes, proof, adminKeys[0]))
66+ then 1
67+ else if (sigVerify(tx.bodyBytes, proof, adminKeys[1]))
68+ then 10
69+ else if (sigVerify(tx.bodyBytes, proof, adminKeys[2]))
70+ then 100
71+ else 0
72+
73+ containsElement([110, 101, 11], (verifyByAllKeys(tx.proofs[0]) + verifyByAllKeys(tx.proofs[1])))
74+ case _ =>
75+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
76+ }
77+ }
78+

github/deemru/w8io/3ef1775 
39.55 ms