tx · DLsfAkjiWUtxPCqWLaHeq4xZ7sWhcrtgQLGmzm7j3Bhh
3MyY8HWSxxH8SLxnBHgYZQh26FVgybkTTp9: -0.00200000 Waves
2022.07.29 13:35 [2160999] smart account 3MyY8HWSxxH8SLxnBHgYZQh26FVgybkTTp9 > SELF 0.00000000 Waves
{
"type": 13,
"id": "DLsfAkjiWUtxPCqWLaHeq4xZ7sWhcrtgQLGmzm7j3Bhh",
"fee": 200000,
"feeAssetId": null,
"timestamp": 1659090962006,
"version": 2,
"chainId": 84,
"sender": "3MyY8HWSxxH8SLxnBHgYZQh26FVgybkTTp9",
"senderPublicKey": "69whdb3wz2NxWkDP633fGFWMnqmhZSDPJ5ThCu3x47jU",
"proofs": [
"3Y8HCcSoqRGSg8Q5K5ELbMNzmb2Ke2cc3TcqZ6gpwxezVeMhAE89FfvXKDxzWmuRP513AFqu1tXsGdATu9mmn9Pb"
],
"script": "base64:AAIFAAAAAAAAAAcIAhIDCgEIAAAACQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkEAAAAA3ZhbAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgIAAAAABQAAAAN2YWwBAAAADXRyeUdldEludGVnZXIAAAABAAAAA2tleQQAAAADdmFsBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAABQAAAAN2YWwBAAAAB2lzT3duZXIAAAABAAAAB2FkZHJlc3MJAAAAAAAAAgUAAAAHYWRkcmVzcwUAAAAEdGhpcwAAAAAbQ09VUlNfQ0VSVElGSUNBVEVfVElMRV9URVhUAgAAAA9ORlQgQ2VydGlmaWNhdGUAAAAAJ0NPVVJTX0NFUlRJRklDQVRFX0RFU0NSSVBUSU9OX0xFRlRfVEVYVAIAAABgVGhpcyBORlQgY2VydGlmaWNhdGUgY2VydGlmaWVzIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjb3Vyc2UgZm9yIGEgdXNlciB3aXRoIGEgd2FsbGV0IGFkZHJlc3Mgb2YgAAAAAChDT1VSU19DRVJUSUZJQ0FURV9ERVNDUklQVElPTl9SSUdIVF9URVhUAgAAAKMuIFRoZSB1c2VyIGhhcyBnYWluZWQgaW4tZGVwdGgga25vd2xlZGdlIGluIHVuZGVyc3RhbmRpbmcgdGhlIG9wZXJhdGlvbiBvZiB0aGUgYmxvY2tjaGFpbiwgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZXhjaGFuZ2UsIGFuZCBzdWNjZXNzZnVsbHkgcGFzc2VkIHRoZSBjb3Vyc2UgZXhhbXMuAQAAAB5nZXRDb3Vyc0NlcnRpZmljYXRlRGVzY3JpcHRpb24AAAABAAAAB2FkZHJlc3MJAAEsAAAAAgkAASwAAAACBQAAACdDT1VSU19DRVJUSUZJQ0FURV9ERVNDUklQVElPTl9MRUZUX1RFWFQFAAAAB2FkZHJlc3MFAAAAKENPVVJTX0NFUlRJRklDQVRFX0RFU0NSSVBUSU9OX1JJR0hUX1RFWFQAAAAAK0NPVVJTX0VSUk9SX0NFUlRJRklDQVRFX0FMUkVBRFlfSVNTVUVEX1RFWFQCAAAANUEgY2VydGlmaWNhdGUgaGFzIGFscmVhZHkgYmVlbiBpc3N1ZWQgYXQgeW91ciBhZGRyZXNzAQAAAAxhZGRUb0hpc3RvcnkAAAABAAAAB2FkZHJlc3MEAAAAA2tleQkAASwAAAACAgAAAAhoaXN0b3J5XwkABCUAAAABBQAAAAdhZGRyZXNzAwkBAAAAAiE9AAAAAgkBAAAADHRyeUdldFN0cmluZwAAAAEFAAAAA2tleQIAAAAACQAAAgAAAAEFAAAAK0NPVVJTX0VSUk9SX0NFUlRJRklDQVRFX0FMUkVBRFlfSVNTVUVEX1RFWFQJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAA2tleQYFAAAAA25pbAAAAAEAAAABaQEAAAAIaXNzdWVORlQAAAABAAAAB2FkZHJlc3MJAAUUAAAAAgkABEwAAAACCQAEQgAAAAUFAAAAG0NPVVJTX0NFUlRJRklDQVRFX1RJTEVfVEVYVAkBAAAAHmdldENvdXJzQ2VydGlmaWNhdGVEZXNjcmlwdGlvbgAAAAEFAAAAB2FkZHJlc3MAAAAAAAAAAAEAAAAAAAAAAAAHBQAAAANuaWwFAAAABHVuaXQAAAAA6EHtQg==",
"height": 2160999,
"applicationStatus": "succeeded",
"spentComplexity": 0
}
View: original | compacted
Prev: EX1VXz9zB4gYVkmyAz8ccAmakpd8zCKDQ3btnGv2Areh
Next: 7WY1qii5a9eQQXEuTa1yQ8hQhZMcLb6rZfyub8U4BXY4
Diff:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 5 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
| 4 | + | func tryGetString (key) = { |
---|
| 5 | + | let val = match getString(this, key) { |
---|
| 6 | + | case b: String => |
---|
| 7 | + | b |
---|
| 8 | + | case _ => |
---|
| 9 | + | "" |
---|
| 10 | + | } |
---|
| 11 | + | val |
---|
| 12 | + | } |
---|
| 13 | + | |
---|
| 14 | + | |
---|
| 15 | + | func tryGetInteger (key) = { |
---|
| 16 | + | let val = match getInteger(this, key) { |
---|
| 17 | + | case b: Int => |
---|
| 18 | + | b |
---|
| 19 | + | case _ => |
---|
| 20 | + | 0 |
---|
| 21 | + | } |
---|
| 22 | + | val |
---|
| 23 | + | } |
---|
| 24 | + | |
---|
| 25 | + | |
---|
| 26 | + | func isOwner (address) = (address == this) |
---|
| 27 | + | |
---|
| 28 | + | |
---|
4 | 29 | | let COURS_CERTIFICATE_TILE_TEXT = "NFT Certificate" |
---|
5 | 30 | | |
---|
6 | 31 | | let COURS_CERTIFICATE_DESCRIPTION_LEFT_TEXT = "This NFT certificate certifies the completion of the course for a user with a wallet address of " |
---|
|
8 | 33 | | let COURS_CERTIFICATE_DESCRIPTION_RIGHT_TEXT = ". The user has gained in-depth knowledge in understanding the operation of the blockchain, interacting with the exchange, and successfully passed the course exams." |
---|
9 | 34 | | |
---|
10 | 35 | | func getCoursCertificateDescription (address) = ((COURS_CERTIFICATE_DESCRIPTION_LEFT_TEXT + address) + COURS_CERTIFICATE_DESCRIPTION_RIGHT_TEXT) |
---|
| 36 | + | |
---|
| 37 | + | |
---|
| 38 | + | let COURS_ERROR_CERTIFICATE_ALREADY_ISSUED_TEXT = "A certificate has already been issued at your address" |
---|
| 39 | + | |
---|
| 40 | + | func addToHistory (address) = { |
---|
| 41 | + | let key = ("history_" + toString(address)) |
---|
| 42 | + | if ((tryGetString(key) != "")) |
---|
| 43 | + | then throw(COURS_ERROR_CERTIFICATE_ALREADY_ISSUED_TEXT) |
---|
| 44 | + | else [BooleanEntry(key, true)] |
---|
| 45 | + | } |
---|
11 | 46 | | |
---|
12 | 47 | | |
---|
13 | 48 | | @Callable(i) |
---|
Full:
Old | New | | Differences |
---|
1 | 1 | | {-# STDLIB_VERSION 5 #-} |
---|
2 | 2 | | {-# SCRIPT_TYPE ACCOUNT #-} |
---|
3 | 3 | | {-# CONTENT_TYPE DAPP #-} |
---|
| 4 | + | func tryGetString (key) = { |
---|
| 5 | + | let val = match getString(this, key) { |
---|
| 6 | + | case b: String => |
---|
| 7 | + | b |
---|
| 8 | + | case _ => |
---|
| 9 | + | "" |
---|
| 10 | + | } |
---|
| 11 | + | val |
---|
| 12 | + | } |
---|
| 13 | + | |
---|
| 14 | + | |
---|
| 15 | + | func tryGetInteger (key) = { |
---|
| 16 | + | let val = match getInteger(this, key) { |
---|
| 17 | + | case b: Int => |
---|
| 18 | + | b |
---|
| 19 | + | case _ => |
---|
| 20 | + | 0 |
---|
| 21 | + | } |
---|
| 22 | + | val |
---|
| 23 | + | } |
---|
| 24 | + | |
---|
| 25 | + | |
---|
| 26 | + | func isOwner (address) = (address == this) |
---|
| 27 | + | |
---|
| 28 | + | |
---|
4 | 29 | | let COURS_CERTIFICATE_TILE_TEXT = "NFT Certificate" |
---|
5 | 30 | | |
---|
6 | 31 | | let COURS_CERTIFICATE_DESCRIPTION_LEFT_TEXT = "This NFT certificate certifies the completion of the course for a user with a wallet address of " |
---|
7 | 32 | | |
---|
8 | 33 | | let COURS_CERTIFICATE_DESCRIPTION_RIGHT_TEXT = ". The user has gained in-depth knowledge in understanding the operation of the blockchain, interacting with the exchange, and successfully passed the course exams." |
---|
9 | 34 | | |
---|
10 | 35 | | func getCoursCertificateDescription (address) = ((COURS_CERTIFICATE_DESCRIPTION_LEFT_TEXT + address) + COURS_CERTIFICATE_DESCRIPTION_RIGHT_TEXT) |
---|
| 36 | + | |
---|
| 37 | + | |
---|
| 38 | + | let COURS_ERROR_CERTIFICATE_ALREADY_ISSUED_TEXT = "A certificate has already been issued at your address" |
---|
| 39 | + | |
---|
| 40 | + | func addToHistory (address) = { |
---|
| 41 | + | let key = ("history_" + toString(address)) |
---|
| 42 | + | if ((tryGetString(key) != "")) |
---|
| 43 | + | then throw(COURS_ERROR_CERTIFICATE_ALREADY_ISSUED_TEXT) |
---|
| 44 | + | else [BooleanEntry(key, true)] |
---|
| 45 | + | } |
---|
11 | 46 | | |
---|
12 | 47 | | |
---|
13 | 48 | | @Callable(i) |
---|
14 | 49 | | func issueNFT (address) = $Tuple2([Issue(COURS_CERTIFICATE_TILE_TEXT, getCoursCertificateDescription(address), 1, 0, false)], unit) |
---|
15 | 50 | | |
---|
16 | 51 | | |
---|