tx · 5QieAPFibJjRStRtjoFYnsznM3J9AMo288W2GjskhD3q 3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV: -0.05000000 Waves 2023.06.08 12:27 [2613515] smart account 3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV > SELF 0.00000000 Waves
{ "type": 13, "id": "5QieAPFibJjRStRtjoFYnsznM3J9AMo288W2GjskhD3q", "fee": 5000000, "feeAssetId": null, "timestamp": 1686216488372, "version": 2, "chainId": 84, "sender": "3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV", "senderPublicKey": "DS6HkopS9zypvxX6VhkdNvv6v4wcPZuChRvTwKJeacxE", "proofs": [ "3569pFejVQRoWn38U2KhpDDbX67WwT78F8AupYSxgkjMrQGGDoC8M21ozcU7WwTuUuwaxpt6ceBxmfCQYVk3iD33" ], "script": "base64:BgISCAISAwoBCBIDCgEIEgQKAggIDAARQUlfVE9LRU5fQVNTRVRfSUQBIJPhcjhxBJtq6JpjHwQkt2RTlyw+vGYLg3SvaLskjeJCAAtTVEFUVVNfT1BFTgIEb3BlbgASU1RBVFVTX0NIRUNLRURfT1VUAgtjaGVja2VkX291dAALU1RBVFVTX0RPTkUCBGRvbmUADkNIRUNLRURfT1VUX0JZAg9fY2hlY2tlZF9vdXRfYnkAE1NJTVBMRV9DSEFUR1BUX1RBU0sCFHNpbWlwbGVfQ2hhdEdQVF90YXNrABBDSEVDS19PVVRfSEVJR0hUAhFfY2hlY2tfb3V0X2hlaWdodAAPUkVHSVNURVJfSEVJR0hUAhBfcmVnaXN0ZXJfaGVpZ2h0AA1DT01NSVRfSEVJR0hUAg5fY29tbWl0X2hlaWdodAEPY2FuQmVDaGVja2VkT3V0AQZ0YXNrSWQEBnN0YXR1cwkAnQgCBQR0aGlzCQCsAgIFBnRhc2tJZAIHX3N0YXR1cwkAAAIFBnN0YXR1cwULU1RBVFVTX09QRU4BDmlzQ29ycmVjdEFnZW50AgZ0YXNrSWQHYWdlbnRJZAQPY2hlY2tvdXRBZ2VudElkCQCdCAIFBHRoaXMJAKwCAgUGdGFza0lkBQ5DSEVDS0VEX09VVF9CWQkAAAIFD2NoZWNrb3V0QWdlbnRJZAUHYWdlbnRJZAEJZ2V0VGFza0lkAQR0eElkBA9jYWxsZXJQdWJsaWNLZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwkArAICBQR0eElkAgxfaW5pdGlhbGl6ZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANzdHIFByRtYXRjaDAFA3N0cgIABAckbWF0Y2gwCQCdCAIFBHRoaXMJAKwCAgkArAICBQR0eElkAgFfBQ9jYWxsZXJQdWJsaWNLZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANzdHIFByRtYXRjaDAFA3N0cgIAAwFpARNyZWdpc3RlckNoYXRHUFRUYXNrAQtkZXNjcmlwdGlvbgQQbnVtYmVyT2ZQYXltZW50cwkAkAMBCAUBaQhwYXltZW50cwMJAQIhPQIFEG51bWJlck9mUGF5bWVudHMAAQkAAgECElBheW1lbnQgbmVjZXNzYXJ5IQQPY2FsbGVyUHVibGljS2V5CQCwCQEIBQFpD2NhbGxlclB1YmxpY0tleQQEdHhJZAkAsAkBCAUBaQ10cmFuc2FjdGlvbklkBAdwYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEA2ZlZQgFB3BheW1lbnQGYW1vdW50BApmZWVBc3NldElkCAUHcGF5bWVudAdhc3NldElkBAZ0YXNrSWQJAKwCAgkArAICBQR0eElkAgFfBQ9jYWxsZXJQdWJsaWNLZXkECXRpbWVzdGFtcAgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CBQpmZWVBc3NldElkBRFBSV9UT0tFTl9BU1NFVF9JRAkAAgECJlBheW1lbnQgb25seSBwb3NzaWJsZSBpbiB0aGUgQUkgVG9rZW4hAwkAZgIAgK3iBAUDZmVlCQACAQIqUGF5bWVudCBuZWVkcyB0byBiZSBhdCBsZWFzdCAwLjEgQUkgVG9rZW4hCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgxfZGVzY3JpcHRpb24FC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUEdHhJZAIMX2luaXRpYWxpemVyBQ9jYWxsZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZ0YXNrSWQCB19zdGF0dXMFC1NUQVRVU19PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgVfdHlwZQUTU0lNUExFX0NIQVRHUFRfVEFTSwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQZ0YXNrSWQFD1JFR0lTVEVSX0hFSUdIVAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBnRhc2tJZAIScmVnaXN0ZXJfdGltZXN0YW1wBQl0aW1lc3RhbXAFA25pbAFpARNjaGVja291dENoYXRHUFRUYXNrAQR0eElkBAZ0YXNrSWQJAQlnZXRUYXNrSWQBBQR0eElkBA9jYWxsZXJQdWJsaWNLZXkJALAJAQgFAWkPY2FsbGVyUHVibGljS2V5BA10YXNrU3RpbGxPcGVuCQEPY2FuQmVDaGVja2VkT3V0AQUGdGFza0lkBAl0aW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBASEBBQ10YXNrU3RpbGxPcGVuCQACAQIbVGFzayBub3Qgb3BlbiBmb3IgY2hlY2tvdXQhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkBQ5DSEVDS0VEX09VVF9CWQUPY2FsbGVyUHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgdfc3RhdHVzBRJTVEFUVVNfQ0hFQ0tFRF9PVVQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUGdGFza0lkBRBDSEVDS19PVVRfSEVJR0hUBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUGdGFza0lkAhRfY2hlY2tfb3V0X3RpbWVzdGFtcAUJdGltZXN0YW1wBQNuaWwBaQERY29tbWl0Q2hhdEdQVFRhc2sCBHR4SWQIcmVzcG9uc2UEBnRhc2tJZAkBCWdldFRhc2tJZAEFBHR4SWQED2NhbGxlclB1YmxpY0tleQkAsAkBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEDGNvcnJlY3RBZ2VudAkBDmlzQ29ycmVjdEFnZW50AgUGdGFza0lkBQ9jYWxsZXJQdWJsaWNLZXkECXRpbWVzdGFtcAgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQEBIQEFDGNvcnJlY3RBZ2VudAkAAgECQVRhc2sgbWF5IG9ubHkgYmUgc3VibWl0dGVkIGJ5IHRoZSBhZ2VudCB3aG8gY2hlY2tlZCB0aGUgdGFzayBvdXQhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGdGFza0lkAgdfc3RhdHVzBQtTVEFUVVNfRE9ORQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBnRhc2tJZAIHX3Jlc3VsdAUIcmVzcG9uc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUGdGFza0lkBQ1DT01NSVRfSEVJR0hUBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUGdGFza0lkAhFfY29tbWl0X3RpbWVzdGFtcAUJdGltZXN0YW1wBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5jhAmOQ==", "height": 2613515, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 88e1FpicY1ovEaZ72UL8zXSdeTFu4BXtCZcd2gjra5sT Next: xFHmzfUQPcoZ5B6hFrU74ZvzYtn1Qhh7Fd6jebNwY3j Diff:
Old | New | Differences | |
---|---|---|---|
49 | 49 | ||
50 | 50 | @Callable(i) | |
51 | 51 | func registerChatGPTTask (description) = { | |
52 | - | let callerPublicKey = toUtf8String(i.callerPublicKey) | |
53 | - | let txId = toUtf8String(i.transactionId) | |
54 | - | let payment = i.payments[0] | |
55 | - | let fee = payment.amount | |
56 | - | let feeAssetId = payment.assetId | |
57 | - | let taskId = ((txId + "_") + callerPublicKey) | |
58 | - | let timestamp = lastBlock.timestamp | |
59 | - | if ((feeAssetId != AI_TOKEN_ASSET_ID)) | |
60 | - | then throw("Payment only possible in the AI Token!") | |
61 | - | else if ((10000000 > fee)) | |
62 | - | then throw("Payment needs to be at least 0.1 AI Token!") | |
63 | - | else [StringEntry((taskId + "_description"), description), StringEntry((txId + "_initializer"), callerPublicKey), StringEntry((taskId + "_status"), STATUS_OPEN), StringEntry((taskId + "_type"), SIMPLE_CHATGPT_TASK), IntegerEntry((taskId + REGISTER_HEIGHT), height), IntegerEntry((taskId + "register_timestamp"), timestamp)] | |
52 | + | let numberOfPayments = size(i.payments) | |
53 | + | if ((numberOfPayments != 1)) | |
54 | + | then throw("Payment necessary!") | |
55 | + | else { | |
56 | + | let callerPublicKey = toUtf8String(i.callerPublicKey) | |
57 | + | let txId = toUtf8String(i.transactionId) | |
58 | + | let payment = i.payments[0] | |
59 | + | let fee = payment.amount | |
60 | + | let feeAssetId = payment.assetId | |
61 | + | let taskId = ((txId + "_") + callerPublicKey) | |
62 | + | let timestamp = lastBlock.timestamp | |
63 | + | if ((feeAssetId != AI_TOKEN_ASSET_ID)) | |
64 | + | then throw("Payment only possible in the AI Token!") | |
65 | + | else if ((10000000 > fee)) | |
66 | + | then throw("Payment needs to be at least 0.1 AI Token!") | |
67 | + | else [StringEntry((taskId + "_description"), description), StringEntry((txId + "_initializer"), callerPublicKey), StringEntry((taskId + "_status"), STATUS_OPEN), StringEntry((taskId + "_type"), SIMPLE_CHATGPT_TASK), IntegerEntry((taskId + REGISTER_HEIGHT), height), IntegerEntry((taskId + "register_timestamp"), timestamp)] | |
68 | + | } | |
64 | 69 | } | |
65 | 70 | ||
66 | 71 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let AI_TOKEN_ASSET_ID = base58'AxGKQRxKo4F2EbhrRq6N2tdLsxtMnpzQsS4QemV6V1W1' | |
5 | 5 | ||
6 | 6 | let STATUS_OPEN = "open" | |
7 | 7 | ||
8 | 8 | let STATUS_CHECKED_OUT = "checked_out" | |
9 | 9 | ||
10 | 10 | let STATUS_DONE = "done" | |
11 | 11 | ||
12 | 12 | let CHECKED_OUT_BY = "_checked_out_by" | |
13 | 13 | ||
14 | 14 | let SIMPLE_CHATGPT_TASK = "simiple_ChatGPT_task" | |
15 | 15 | ||
16 | 16 | let CHECK_OUT_HEIGHT = "_check_out_height" | |
17 | 17 | ||
18 | 18 | let REGISTER_HEIGHT = "_register_height" | |
19 | 19 | ||
20 | 20 | let COMMIT_HEIGHT = "_commit_height" | |
21 | 21 | ||
22 | 22 | func canBeCheckedOut (taskId) = { | |
23 | 23 | let status = getString(this, (taskId + "_status")) | |
24 | 24 | (status == STATUS_OPEN) | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func isCorrectAgent (taskId,agentId) = { | |
29 | 29 | let checkoutAgentId = getString(this, (taskId + CHECKED_OUT_BY)) | |
30 | 30 | (checkoutAgentId == agentId) | |
31 | 31 | } | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func getTaskId (txId) = { | |
35 | 35 | let callerPublicKey = match getString(this, (txId + "_initializer")) { | |
36 | 36 | case str: String => | |
37 | 37 | str | |
38 | 38 | case _ => | |
39 | 39 | "" | |
40 | 40 | } | |
41 | 41 | match getString(this, ((txId + "_") + callerPublicKey)) { | |
42 | 42 | case str: String => | |
43 | 43 | str | |
44 | 44 | case _ => | |
45 | 45 | "" | |
46 | 46 | } | |
47 | 47 | } | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | @Callable(i) | |
51 | 51 | func registerChatGPTTask (description) = { | |
52 | - | let callerPublicKey = toUtf8String(i.callerPublicKey) | |
53 | - | let txId = toUtf8String(i.transactionId) | |
54 | - | let payment = i.payments[0] | |
55 | - | let fee = payment.amount | |
56 | - | let feeAssetId = payment.assetId | |
57 | - | let taskId = ((txId + "_") + callerPublicKey) | |
58 | - | let timestamp = lastBlock.timestamp | |
59 | - | if ((feeAssetId != AI_TOKEN_ASSET_ID)) | |
60 | - | then throw("Payment only possible in the AI Token!") | |
61 | - | else if ((10000000 > fee)) | |
62 | - | then throw("Payment needs to be at least 0.1 AI Token!") | |
63 | - | else [StringEntry((taskId + "_description"), description), StringEntry((txId + "_initializer"), callerPublicKey), StringEntry((taskId + "_status"), STATUS_OPEN), StringEntry((taskId + "_type"), SIMPLE_CHATGPT_TASK), IntegerEntry((taskId + REGISTER_HEIGHT), height), IntegerEntry((taskId + "register_timestamp"), timestamp)] | |
52 | + | let numberOfPayments = size(i.payments) | |
53 | + | if ((numberOfPayments != 1)) | |
54 | + | then throw("Payment necessary!") | |
55 | + | else { | |
56 | + | let callerPublicKey = toUtf8String(i.callerPublicKey) | |
57 | + | let txId = toUtf8String(i.transactionId) | |
58 | + | let payment = i.payments[0] | |
59 | + | let fee = payment.amount | |
60 | + | let feeAssetId = payment.assetId | |
61 | + | let taskId = ((txId + "_") + callerPublicKey) | |
62 | + | let timestamp = lastBlock.timestamp | |
63 | + | if ((feeAssetId != AI_TOKEN_ASSET_ID)) | |
64 | + | then throw("Payment only possible in the AI Token!") | |
65 | + | else if ((10000000 > fee)) | |
66 | + | then throw("Payment needs to be at least 0.1 AI Token!") | |
67 | + | else [StringEntry((taskId + "_description"), description), StringEntry((txId + "_initializer"), callerPublicKey), StringEntry((taskId + "_status"), STATUS_OPEN), StringEntry((taskId + "_type"), SIMPLE_CHATGPT_TASK), IntegerEntry((taskId + REGISTER_HEIGHT), height), IntegerEntry((taskId + "register_timestamp"), timestamp)] | |
68 | + | } | |
64 | 69 | } | |
65 | 70 | ||
66 | 71 | ||
67 | 72 | ||
68 | 73 | @Callable(i) | |
69 | 74 | func checkoutChatGPTTask (txId) = { | |
70 | 75 | let taskId = getTaskId(txId) | |
71 | 76 | let callerPublicKey = toUtf8String(i.callerPublicKey) | |
72 | 77 | let taskStillOpen = canBeCheckedOut(taskId) | |
73 | 78 | let timestamp = lastBlock.timestamp | |
74 | 79 | if (!(taskStillOpen)) | |
75 | 80 | then throw("Task not open for checkout!") | |
76 | 81 | else [StringEntry((taskId + CHECKED_OUT_BY), callerPublicKey), StringEntry((taskId + "_status"), STATUS_CHECKED_OUT), IntegerEntry((taskId + CHECK_OUT_HEIGHT), height), IntegerEntry((taskId + "_check_out_timestamp"), timestamp)] | |
77 | 82 | } | |
78 | 83 | ||
79 | 84 | ||
80 | 85 | ||
81 | 86 | @Callable(i) | |
82 | 87 | func commitChatGPTTask (txId,response) = { | |
83 | 88 | let taskId = getTaskId(txId) | |
84 | 89 | let callerPublicKey = toUtf8String(i.callerPublicKey) | |
85 | 90 | let correctAgent = isCorrectAgent(taskId, callerPublicKey) | |
86 | 91 | let timestamp = lastBlock.timestamp | |
87 | 92 | if (!(correctAgent)) | |
88 | 93 | then throw("Task may only be submitted by the agent who checked the task out!") | |
89 | 94 | else [StringEntry((taskId + "_status"), STATUS_DONE), StringEntry((taskId + "_result"), response), IntegerEntry((taskId + COMMIT_HEIGHT), height), IntegerEntry((taskId + "_commit_timestamp"), timestamp)] | |
90 | 95 | } | |
91 | 96 | ||
92 | 97 | ||
93 | 98 | @Verifier(tx) | |
94 | 99 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
95 | 100 |
github/deemru/w8io/026f985 45.63 ms ◑