tx · 2Q4j5dJM71RdtMbder1nGbuT4dP8HhFr4sXhARVa9Xgb 3GpJhSPmFdaB1N3nbmGGnqUeC7jSK4iMbG1: -0.01000000 Gic 2025.06.25 22:04 [6591] smart account 3GpJhSPmFdaB1N3nbmGGnqUeC7jSK4iMbG1 > SELF 0.00000000 Gic
{ "type": 13, "id": "2Q4j5dJM71RdtMbder1nGbuT4dP8HhFr4sXhARVa9Xgb", "fee": 1000000, "feeAssetId": null, "timestamp": 1750878313959, "version": 2, "chainId": 71, "sender": "3GpJhSPmFdaB1N3nbmGGnqUeC7jSK4iMbG1", "senderPublicKey": "3QpT3yez6M99264RVoDPZZ3oZ7JSPeYduUQDJqdhG82y", "proofs": [ "3vhscacsrEsyv9Vjeabh4tiCgqQiyshLa76KXnh6hfemodrirdhbN5YQu1bJbMdjFjGr8r4P4q38nJcmoa1ifKQC" ], "script": "base64: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", "height": 6591, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: DnFcsTBvMYcqykihzMRQZb4PaU5CW2tS1E3YLQ7nG9dG Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let adminAddress = "admin_address" | |
5 | + | ||
6 | + | let fee = "fee" | |
7 | + | ||
8 | + | func getAdminAddress () = match getString(adminAddress) { | |
9 | + | case t: String => | |
10 | + | t | |
11 | + | case _ => | |
12 | + | toBase58String(this.bytes) | |
13 | + | } | |
14 | + | ||
15 | + | ||
16 | + | func getAssetDecimals (assetId) = if ((assetId == "GIC")) | |
17 | + | then 8 | |
18 | + | else match assetInfo(fromBase58String(assetId)) { | |
19 | + | case a: Asset => | |
20 | + | a.decimals | |
21 | + | case _ => | |
22 | + | 8 | |
23 | + | } | |
24 | + | ||
25 | + | ||
26 | + | func getAssetquantity (assetId) = if ((assetId == "GIC")) | |
27 | + | then 1000000000 | |
28 | + | else match assetInfo(fromBase58String(assetId)) { | |
29 | + | case a: Asset => | |
30 | + | a.quantity | |
31 | + | case _ => | |
32 | + | 1000000000 | |
33 | + | } | |
34 | + | ||
35 | + | ||
36 | + | func getIsReissuable (assetId) = if ((assetId == "GIC")) | |
37 | + | then true | |
38 | + | else match assetInfo(fromBase58String(assetId)) { | |
39 | + | case a: Asset => | |
40 | + | a.reissuable | |
41 | + | case _ => | |
42 | + | true | |
43 | + | } | |
44 | + | ||
45 | + | ||
46 | + | @Callable(i) | |
47 | + | func changeAdmin (address) = { | |
48 | + | let admin = getAdminAddress() | |
49 | + | if ((toBase58String(i.caller.bytes) != admin)) | |
50 | + | then throw("Only the Admin itself can invoke this function.") | |
51 | + | else [StringEntry(adminAddress, address)] | |
52 | + | } | |
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | @Callable(i) | |
57 | + | func setNFTFee (feeBps) = { | |
58 | + | let admin = getAdminAddress() | |
59 | + | if ((toBase58String(i.caller.bytes) != admin)) | |
60 | + | then throw("Only the Admin itself can invoke this function") | |
61 | + | else if (if ((0 > feeBps)) | |
62 | + | then true | |
63 | + | else (feeBps > 1000)) | |
64 | + | then throw("Fee must be between 0 and 1000 basis points") | |
65 | + | else [IntegerEntry(fee, feeBps)] | |
66 | + | } | |
67 | + | ||
68 | + | ||
69 | + | ||
70 | + | @Callable(i) | |
71 | + | func createNFT (name,ipfs) = if ((100000000 > i.fee)) | |
72 | + | then throw("Error: NFT fee amount to be paid is less than 1 GIC") | |
73 | + | else if ((ipfs == "")) | |
74 | + | then throw("Error: Put a valid IPFS string.") | |
75 | + | else if ((name == "")) | |
76 | + | then throw("Error: Put a valid NFT name string.") | |
77 | + | else { | |
78 | + | let nftCreate = Issue(name, ipfs, 1, 0, false) | |
79 | + | let idNft = calculateAssetId(nftCreate) | |
80 | + | [nftCreate, ScriptTransfer(i.caller, 1, idNft)] | |
81 | + | } | |
82 | + | ||
83 | + | ||
84 | + | ||
85 | + | @Callable(i) | |
86 | + | func sellNFT (ValueToSell) = if ((100 > ValueToSell)) | |
87 | + | then throw("Error: set a minimum value (0.00000100) to sell your NFT") | |
88 | + | else { | |
89 | + | let nft = i.payments[0] | |
90 | + | let pmtAssetId = match nft.assetId { | |
91 | + | case a: ByteVector => | |
92 | + | toBase58String(a) | |
93 | + | case _ => | |
94 | + | "GIC" | |
95 | + | } | |
96 | + | let isRessuable = getIsReissuable(pmtAssetId) | |
97 | + | let totalQuantity = getAssetquantity(pmtAssetId) | |
98 | + | let totalDecimals = getAssetDecimals(pmtAssetId) | |
99 | + | let OldNumberH = valueOrElse(getIntegerValue(this, ("history_" + pmtAssetId)), 0) | |
100 | + | let numberH = (OldNumberH + 1) | |
101 | + | let OldNumberHUser = valueOrElse(getIntegerValue(this, ("history_" + pmtAssetId)), 0) | |
102 | + | let numberHUser = (OldNumberH + 1) | |
103 | + | if ((pmtAssetId == "GIC")) | |
104 | + | then throw("Error: Invalid NFT.") | |
105 | + | else if (if (if (!(isRessuable)) | |
106 | + | then (totalQuantity == 1) | |
107 | + | else false) | |
108 | + | then (totalDecimals == 0) | |
109 | + | else false) | |
110 | + | then [BooleanEntry(("is_sale_" + pmtAssetId), true), IntegerEntry(("price_sale_" + pmtAssetId), ValueToSell), StringEntry(("coin_accepted_" + pmtAssetId), "GIC"), StringEntry(("saler_" + pmtAssetId), toBase58String(i.caller.bytes)), IntegerEntry(("history_" + toBase58String(i.caller.bytes)), numberHUser), StringEntry(((("history_" + toBase58String(i.caller.bytes)) + "_") + toString(numberHUser)), pmtAssetId), IntegerEntry(("history_" + pmtAssetId), numberH), StringEntry((("history_" + pmtAssetId) + toString(numberH)), "sell")] | |
111 | + | else throw("Error: this is an asset, not an NFT.") | |
112 | + | } | |
113 | + | ||
114 | + | ||
115 | + | ||
116 | + | @Callable(i) | |
117 | + | func buyNFT (nftId) = { | |
118 | + | let pay = i.payments[0] | |
119 | + | let pmtAssetId = match pay.assetId { | |
120 | + | case a: ByteVector => | |
121 | + | toBase58String(a) | |
122 | + | case _ => | |
123 | + | "GIC" | |
124 | + | } | |
125 | + | let feeBps = toBigInt(getIntegerValue(this, fee)) | |
126 | + | let isSale = valueOrElse(getBooleanValue(("is_sale_" + nftId)), false) | |
127 | + | let valueSale = valueOrElse(getIntegerValue(("price_sale_" + nftId)), 0) | |
128 | + | let feeToSend = ((toBigInt(pay.amount) * feeBps) / toBigInt(10000)) | |
129 | + | let adminAddr = getAdminAddress() | |
130 | + | let OldNumberH = valueOrElse(getIntegerValue(this, ("history_" + pmtAssetId)), 0) | |
131 | + | let numberH = (OldNumberH + 1) | |
132 | + | let OldNumberHUser = valueOrElse(getIntegerValue(this, ("history_" + pmtAssetId)), 0) | |
133 | + | let numberHUser = (OldNumberH + 1) | |
134 | + | let toSendToSaler = (toBigInt(pay.amount) - feeToSend) | |
135 | + | if ((pmtAssetId != "GIC")) | |
136 | + | then throw("Error: Invalid Asset to buy.") | |
137 | + | else if (!(isSale)) | |
138 | + | then throw("This NFT is no longer for sale.") | |
139 | + | else if ((valueSale != pay.amount)) | |
140 | + | then throw("Insufficient value to make the purchase.") | |
141 | + | else [ScriptTransfer(i.caller, 1, fromBase58String(nftId)), ScriptTransfer(addressFromStringValue(getStringValue(this, ("saler_" + pmtAssetId))), toInt(toSendToSaler), unit), ScriptTransfer(addressFromStringValue(adminAddr), toInt(feeToSend), unit), BooleanEntry(("is_sale_" + pmtAssetId), false), StringEntry(("saler_" + pmtAssetId), toBase58String(i.caller.bytes)), IntegerEntry(("history_" + pmtAssetId), numberH), StringEntry((("history_" + pmtAssetId) + toString(numberH)), "buy")] | |
142 | + | } | |
143 | + | ||
144 | + | ||
145 | + | @Verifier(tx) | |
146 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
147 | + |
github/gicsportsofficial/g8-explorer 87.96 ms ◑