@stellar-expert/contract-wasm-interface-parser 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,97 +20,242 @@ Example output:
20
20
 
21
21
  ```json
22
22
  {
23
- "unions": [
24
- {
25
- "name": "Asset",
26
- "cases": {
27
- "Stellar": [
28
- "address"
29
- ],
30
- "Other": [
31
- "symbol"
32
- ]
23
+ "enums": {
24
+ "SubscriptionStatus": {
25
+ "Active": {
26
+ "value": 0
27
+ },
28
+ "Cancelled": {
29
+ "value": 2
30
+ },
31
+ "Suspended": {
32
+ "value": 1
33
33
  }
34
34
  }
35
- ],
36
- "structs": [
37
- {
38
- "name": "TickerAsset",
39
- "fields": [
40
- {
41
- "name": "asset",
42
- "type": "Asset",
43
- "doc": "Short ticker name of the asset"
35
+ },
36
+ "errors": {
37
+ "AlreadyInitialized": {
38
+ "value": 0
39
+ },
40
+ "InvalidAmount": {
41
+ "value": 4
42
+ },
43
+ "InvalidHeartbeat": {
44
+ "value": 5
45
+ },
46
+ "InvalidSubscriptionStatusError": {
47
+ "value": 8
48
+ },
49
+ "InvalidThreshold": {
50
+ "value": 6
51
+ },
52
+ "NotInitialized": {
53
+ "value": 3
54
+ },
55
+ "SubscriptionNotFound": {
56
+ "value": 2
57
+ },
58
+ "Unauthorized": {
59
+ "value": 1
60
+ },
61
+ "WebhookTooLong": {
62
+ "value": 7
63
+ }
64
+ },
65
+ "functions": {
66
+ "admin": {
67
+ "inputs": {},
68
+ "outputs": [
69
+ "option<address>"
70
+ ]
71
+ },
72
+ "cancel": {
73
+ "inputs": {
74
+ "subscription_id": {
75
+ "type": "u64"
76
+ }
77
+ },
78
+ "outputs": []
79
+ },
80
+ "charge": {
81
+ "inputs": {
82
+ "subscription_ids": {
83
+ "type": "vec<u64>"
84
+ }
85
+ },
86
+ "outputs": []
87
+ },
88
+ "config": {
89
+ "inputs": {
90
+ "config": {
91
+ "type": "ConfigData"
92
+ }
93
+ },
94
+ "outputs": []
95
+ },
96
+ "create_subscription": {
97
+ "inputs": {
98
+ "amount": {
99
+ "type": "u64"
44
100
  },
45
- {
46
- "name": "source",
47
- "type": "string",
48
- "doc": "Data provider ID"
101
+ "new_subscription": {
102
+ "type": "CreateSubscription"
49
103
  }
104
+ },
105
+ "outputs": [
106
+ "tuple<u64,Subscription>"
50
107
  ]
51
- }
52
- ],
53
- "errors": [
54
- {
55
- "name": "Error",
56
- "cases": [
57
- {
58
- "name": "AlreadyInitialized",
59
- "value": 0
108
+ },
109
+ "deposit": {
110
+ "inputs": {
111
+ "amount": {
112
+ "type": "u64"
60
113
  },
61
- {
62
- "name": "Unauthorized",
63
- "value": 1
114
+ "from": {
115
+ "type": "address"
116
+ },
117
+ "subscription_id": {
118
+ "type": "u64"
64
119
  }
120
+ },
121
+ "outputs": []
122
+ },
123
+ "fee": {
124
+ "inputs": {},
125
+ "outputs": [
126
+ "u64"
65
127
  ]
66
- }
67
- ],
68
- "enums": [
69
- {
70
- "name": "SubscriptionStatus",
71
- "cases": {
72
- "Active": 0,
73
- "Suspended": 1,
74
- "Cancelled": 2
75
- }
76
- }
77
- ],
78
- "functions": [
79
- {
80
- "name": "config",
81
- "inputs": [
82
- {
83
- "name": "config",
84
- "type": "ConfigData"
85
- "doc": "New configuration data"
128
+ },
129
+ "get_subscription": {
130
+ "inputs": {
131
+ "subscription_id": {
132
+ "type": "u64"
86
133
  }
87
- ],
88
- "outputs": [],
89
- "doc": "Update contract confirguration"
90
- },
91
- {
92
- "name": "set_fee",
93
- "inputs": [
94
- {
95
- "name": "fee",
134
+ },
135
+ "outputs": [
136
+ "Subscription"
137
+ ]
138
+ },
139
+ "set_fee": {
140
+ "inputs": {
141
+ "fee": {
96
142
  "type": "u64"
97
143
  }
98
- ],
144
+ },
99
145
  "outputs": []
100
146
  },
101
- {
102
- "name": "get_subscription",
103
- "inputs": [
104
- {
105
- "name": "subscription_id",
147
+ "token": {
148
+ "inputs": {},
149
+ "outputs": [
150
+ "address"
151
+ ]
152
+ },
153
+ "trigger": {
154
+ "inputs": {
155
+ "timestamp": {
106
156
  "type": "u64"
157
+ },
158
+ "trigger_hash": {
159
+ "type": "bytesn<32>"
107
160
  }
108
- ],
161
+ },
162
+ "outputs": []
163
+ },
164
+ "update_contract": {
165
+ "inputs": {
166
+ "wasm_hash": {
167
+ "type": "bytesn<32>"
168
+ }
169
+ },
170
+ "outputs": []
171
+ },
172
+ "version": {
173
+ "inputs": {},
109
174
  "outputs": [
110
- "Subscription"
175
+ "u32"
176
+ ]
177
+ }
178
+ },
179
+ "structs": {
180
+ "ConfigData": {
181
+ "admin": {
182
+ "type": "address"
183
+ },
184
+ "fee": {
185
+ "type": "u64"
186
+ },
187
+ "token": {
188
+ "type": "address"
189
+ }
190
+ },
191
+ "CreateSubscription": {
192
+ "asset1": {
193
+ "type": "TickerAsset"
194
+ },
195
+ "asset2": {
196
+ "type": "TickerAsset"
197
+ },
198
+ "heartbeat": {
199
+ "type": "u32"
200
+ },
201
+ "owner": {
202
+ "type": "address"
203
+ },
204
+ "threshold": {
205
+ "type": "u32"
206
+ },
207
+ "webhook": {
208
+ "type": "bytes"
209
+ }
210
+ },
211
+ "Subscription": {
212
+ "asset1": {
213
+ "type": "TickerAsset"
214
+ },
215
+ "asset2": {
216
+ "type": "TickerAsset"
217
+ },
218
+ "balance": {
219
+ "type": "u64"
220
+ },
221
+ "heartbeat": {
222
+ "type": "u32"
223
+ },
224
+ "last_charge": {
225
+ "type": "u64"
226
+ },
227
+ "owner": {
228
+ "type": "address"
229
+ },
230
+ "status": {
231
+ "type": "SubscriptionStatus"
232
+ },
233
+ "threshold": {
234
+ "type": "u32"
235
+ },
236
+ "webhook": {
237
+ "type": "bytes"
238
+ }
239
+ },
240
+ "TickerAsset": {
241
+ "asset": {
242
+ "type": "Asset"
243
+ },
244
+ "source": {
245
+ "type": "string"
246
+ }
247
+ }
248
+ },
249
+ "unions": {
250
+ "Asset": {
251
+ "Other": [
252
+ "symbol"
253
+ ],
254
+ "Stellar": [
255
+ "address"
111
256
  ]
112
257
  }
113
- ],
258
+ },
114
259
  "interfaceVersion": "85899345920",
115
260
  "rustVersion": "1.74.0",
116
261
  "sdkVersion": "20.5.0#9e2c3022b4355b224a7a814e13ba51761eeb14bb"
package/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import {xdr} from '@stellar/stellar-base'
2
- import {XdrReader} from './src/xdr-reader'
2
+ import {parseSectionEntriesXdr} from './src/xdr-reader'
3
3
  import {WasmSectionReader} from './src/wasm-section-reader'
4
4
  import {parseContractMeta, parseSpec} from './src/xdr-spec-parser'
5
5
 
6
6
  /**
7
7
  * Parse contract metadata from WASM sections
8
8
  * @param {Buffer} rawWasm
9
- * @return {{}}
9
+ * @return {ParsedWasmMeta}
10
10
  */
11
11
  export function parseContractMetadata(rawWasm) {
12
12
  const wasmSectionReader = new WasmSectionReader(rawWasm)
@@ -18,21 +18,24 @@ export function parseContractMetadata(rawWasm) {
18
18
  res.interfaceVersion = xdr.ScEnvMetaEntry.fromXDR(section.contents).value().toString()
19
19
  break
20
20
  case 'contractmetav0':
21
- Object.assign(res, parseContractMeta(parseEntries(section.contents, xdr.ScMetaEntry)))
21
+ Object.assign(res, parseContractMeta(parseSectionEntriesXdr(section.contents, xdr.ScMetaEntry)))
22
22
  break
23
23
  case 'contractspecv0':
24
- Object.assign(res, parseSpec(parseEntries(section.contents, xdr.ScSpecEntry)))
24
+ Object.assign(res, parseSpec(parseSectionEntriesXdr(section.contents, xdr.ScSpecEntry)))
25
25
  break
26
26
  }
27
27
  }
28
28
  return res
29
29
  }
30
30
 
31
- function parseEntries(buffer, xdrContract) {
32
- const reader = new XdrReader(buffer)
33
- const entries = []
34
- while (!reader.eof) {
35
- entries.push(xdrContract.read(reader))
36
- }
37
- return entries
38
- }
31
+ /**
32
+ * @typedef {{}} ParsedWasmMeta
33
+ * @property {{}} functions
34
+ * @property {{}} [errors]
35
+ * @property {{}} [enums]
36
+ * @property {{}} [structs]
37
+ * @property {{}} [unions]
38
+ * @property {string} rustVersion
39
+ * @property {string} sdkVersion
40
+ * @property {string} interfaceVersion
41
+ */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stellar-expert/contract-wasm-interface-parser",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Contract interface metadata parser for binary WASM",
5
5
  "main": "index.js",
6
6
  "module": "./index.js",
@@ -8,6 +8,9 @@
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/stellar-expert/contract-wasm-interface-parser.git"
10
10
  },
11
+ "scripts": {
12
+ "test": "jest"
13
+ },
11
14
  "author": "orbitlens <orbit@stellar.expert>",
12
15
  "license": "MIT",
13
16
  "peerDependencies": {
package/src/xdr-reader.js CHANGED
@@ -1,4 +1,19 @@
1
- export class XdrReader {
1
+ /**
2
+ *
3
+ * @param {Buffer} buffer
4
+ * @param {{read: function}} xdrContract
5
+ * @return {{}[]}
6
+ */
7
+ export function parseSectionEntriesXdr(buffer, xdrContract) {
8
+ const reader = new XdrReader(buffer)
9
+ const entries = []
10
+ while (!reader.eof) {
11
+ entries.push(xdrContract.read(reader))
12
+ }
13
+ return entries
14
+ }
15
+
16
+ class XdrReader {
2
17
  /**
3
18
  * @constructor
4
19
  * @param {Buffer} source - Buffer containing serialized data
@@ -30,12 +30,13 @@ class SpecParser {
30
30
  */
31
31
  res
32
32
 
33
- addSpec(key, descriptor, doc) {
33
+ addSpec(key, attr, parser) {
34
+ //this.parseFunction(attr), attr.doc
34
35
  let spec = this.res[key]
35
36
  if (spec === undefined) {
36
- spec = this.res[key] = []
37
+ spec = this.res[key] = {}
37
38
  }
38
- spec.push(this.withDocs(descriptor, doc))
39
+ parser.call(this, attr, spec)
39
40
  }
40
41
 
41
42
  parse(entries) {
@@ -44,19 +45,19 @@ class SpecParser {
44
45
  const {_attributes: attr} = value
45
46
  switch (spec._arm) {
46
47
  case 'functionV0':
47
- this.addSpec('functions', this.parseFunction(attr), attr.doc)
48
+ this.addSpec('functions', attr, this.parseFunction)
48
49
  break
49
50
  case 'udtStructV0':
50
- this.addSpec('structs', this.parseStruct(attr), attr.doc)
51
+ this.addSpec('structs', attr, this.parseStruct)
51
52
  break
52
53
  case 'udtUnionV0':
53
- this.addSpec('unions', this.parseUnion(attr), attr.doc)
54
+ this.addSpec('unions', attr, this.parseUnion)
54
55
  break
55
56
  case 'udtEnumV0':
56
- this.addSpec('enums', this.parseEnum(attr), attr.doc)
57
+ this.addSpec('enums', attr, this.parseEnum)
57
58
  break
58
59
  case 'udtErrorEnumV0':
59
- this.addSpec('errors', this.parseError(attr), attr.doc)
60
+ this.addSpec('errors', attr, this.parseError)
60
61
  break
61
62
  default:
62
63
  console.log('Unknown spec type: ' + spec._arm)
@@ -66,57 +67,47 @@ class SpecParser {
66
67
  return this.res
67
68
  }
68
69
 
69
- parseFunction(attr) {
70
- return {
71
- name: attr.name.toString(),
72
- inputs: attr.inputs.map(i => this.parseParameter(i)),
70
+ parseFunction(attr, into) {
71
+ const inputs = {}
72
+ attr.inputs.forEach(i => this.parseParameter(i, inputs))
73
+ into[attr.name.toString()] = this.withDocs({
74
+ inputs,
73
75
  outputs: attr.outputs.map(o => this.parseParameterType(o))
74
- }
76
+ }, attr.doc)
75
77
  }
76
78
 
77
- parseStruct(attr) {
78
- return {
79
- name: this.parseStructName(attr),
80
- fields: attr.fields.map(f => this.parseParameter(f))
81
- }
79
+ parseStruct(attr, into) {
80
+ const fields = {}
81
+ attr.fields.forEach(f => this.parseParameter(f, fields))
82
+ into[this.parseStructName(attr)] = this.withDocs(fields, attr.doc)
82
83
  }
83
84
 
84
- parseUnion(attr) {
85
- return {
86
- name: this.parseStructName(attr),
87
- cases: attr.cases.reduce((agg, c) => {
88
- const value = c.value()
89
- agg[value.name().toString()] = value.type ?
90
- value.type().map(t => this.parseParameterType(t)) :
91
- []
92
- return agg
93
- }, {})
94
- }
85
+ parseUnion(attr, into) {
86
+ const cases = {}
87
+ attr.cases.forEach(c => {
88
+ const value = c.value()
89
+ cases[value.name().toString()] = value.type ?
90
+ value.type().map(t => this.parseParameterType(t)) :
91
+ []
92
+ })
93
+ into[this.parseStructName(attr)] = this.withDocs(cases, attr.doc)
95
94
  }
96
95
 
97
- parseEnum(attr) {
98
- return {
99
- name: this.parseStructName(attr),
100
- cases: attr.cases.reduce((agg, c) => {
101
- const value = c.value()
102
- if (value.name) {
103
- agg[value.name().toString()] = value.value()
104
- } else {
105
- agg[c._attributes.name] = value
106
- }
107
- return agg
108
- }, {})
109
- }
96
+ parseEnum(attr, into) {
97
+ const cases = {}
98
+ attr.cases.forEach(c => {
99
+ const value = c.value()
100
+ if (value.name) {
101
+ cases[value.name().toString()] = value.value()
102
+ } else {
103
+ cases[c._attributes.name.toString()] = this.withDocs({value}, c.doc())
104
+ }
105
+ })
106
+ into[this.parseStructName(attr)] = this.withDocs(cases, attr.doc)
110
107
  }
111
108
 
112
- parseError(attr) {
113
- return {
114
- name: this.parseStructName(attr),
115
- cases: attr.cases.map(c => ({
116
- name: c.name().toString(),
117
- value: c.value()
118
- }))
119
- }
109
+ parseError(attr, into) {
110
+ attr.cases.forEach(c => into[c.name().toString()] = this.withDocs({value: c.value()}, c.doc()))
120
111
  }
121
112
 
122
113
  parseParameterType(type) {
@@ -149,13 +140,9 @@ class SpecParser {
149
140
  return structName
150
141
  }
151
142
 
152
- parseParameter(param) {
143
+ parseParameter(param, into) {
153
144
  const {_attributes: attr} = param
154
- const res = {
155
- name: attr.name.toString(),
156
- type: this.parseParameterType(attr.type)
157
- }
158
- return this.withDocs(res, attr.doc)
145
+ into[attr.name.toString()] = this.withDocs({type: this.parseParameterType(attr.type)}, attr.doc)
159
146
  }
160
147
 
161
148
  withDocs(descriptor, doc) {
@@ -1,318 +0,0 @@
1
- {
2
- "subscription": {
3
- "wasm": "AGFzbQEAAAABpgEbYAN/f38Bf2ACf38Bf2ABfgF+YAJ+fgF+YAN+fn4BfmAAAX5gBH5+fn4BfmACf34AYAN/f38AYAJ/fwF+YAJ+fgF/YAN/f34AYAF/AGABfgBgAn9/AGABfwF+YAV+f39/fwBgBH9/f38BfmAAAX9gAn5/AGAAAGADfn5+AGAEfn5+fgBgA35/fwF/YAZ/f39/f38Bf2AFf39/f38Bf2AFf35+fn4AApEBGAFpAV8AAgFpATAAAgFsATEAAwFsAV8ABAFiAWkAAwF2ATMAAgFiAW0ABAFhATAAAgF4ATcABQF4ATQABQF4ATEAAwFsATYAAgF2AV8ABQF2ATEAAwF2ATYAAwFiATgAAgF2AWcAAwFpATYAAwFiAWoAAwFkAV8ABAFtATkABAFtAWEABgFsATAAAwF4ATUAAgNYVwIHCAkKCAsLDAwNDgMPDw4PBxAOBwEOCQMREgwFDQUNBxMUDRQFFRUWCQMJFQUIAgIDBwICAwQCAgUFDgUFARQXGBkAAAwAAQEAAQABAQEODgEUDBoAAAQFAXABDg4FAwEAEQYZA38BQYCAwAALfwBB6IvAAAt/AEHwi8AACwe9AREGbWVtb3J5AgAGY29uZmlnAEcHc2V0X2ZlZQBIB3RyaWdnZXIASQ91cGRhdGVfY29udHJhY3QASwZjaGFyZ2UATBNjcmVhdGVfc3Vic2NyaXB0aW9uAE0HZGVwb3NpdABOBmNhbmNlbABPEGdldF9zdWJzY3JpcHRpb24AUAVhZG1pbgBRB3ZlcnNpb24AUgNmZWUAVAV0b2tlbgBVAV8AagpfX2RhdGFfZW5kAwELX19oZWFwX2Jhc2UDAgkTAQBBAQsNVmVkIWYgYl1eX2BraQrbbVclAAJAIABC//////////8AVg0AIABCCIZCBoQPCyAAEICAgIAAC10CAX8BfgJAAkAgAadB/wFxIgJBwABGDQACQCACQQZGDQBCASEDQoOQgICAASEBDAILIAFCCIghAUIAIQMMAQtCACEDIAEQgYCAgAAhAQsgACABNwMIIAAgAzcDAAt9AgF/An4jgICAgABBEGsiAySAgICAAAJAAkACQCABIAIQm4CAgAAiBEICEJyAgIAADQBCACEEDAELIAMgBEICEIKAgIAAEJmAgIAAIAMpAwCnDQEgAykDCCEFQgEhBAsgACAFNwMIIAAgBDcDACADQRBqJICAgIAADwsAAAsaACAArUIghkIEhCABrUIghkIEhBCEgICAAAsPACAAIAEQloCAgABCAVELUAECfgJAAkAgASACEJuAgIAAIgNCAhCcgICAAA0AQgAhBAwBC0IBIQQgA0ICEIKAgIAAIgNC/wGDQs0AUQ0AAAALIAAgAzcDCCAAIAQ3AwALFwAgACABEJuAgIAAIAJCAhCDgICAABoLHQAgACABEJuAgIAAIAIQmICAgABCAhCDgICAABoLAgALAgALGQACQCAApw0AQdiDwIAAQSsQo4CAgAAACwsJABDXgICAAAALkgEBAn8jgICAgABBIGsiAiSAgICAACACIAE3AwggAiAANwMAQQAhAwN+AkAgA0EQRw0AQQAhAwJAA0AgA0EQRg0BIAJBEGogA2ogAiADaikDADcDACADQQhqIQMMAAsLIAJBEGoQpYCAgAAhASACQSBqJICAgIAAIAEPCyACQRBqIANqQgI3AwAgA0EIaiEDDAALCwwAIABBAhDDgICAAAtDAgF/AX4jgICAgABBEGsiASSAgICAACABIAAQp4CAgAACQCABKQMAp0UNAAAACyABKQMIIQIgAUEQaiSAgICAACACC40CAgF/BH4jgICAgABB8ABrIgIkgICAgAAgAkEYaiABEK6AgIAAAkACQCACKAIYDQAgAikDICEDIAJBCGogAUEYahCugICAACACKQMIpw0AIAIpAxAhBCABKQNAEJiAgIAAIQUgATUCVCEGIAIgASkDSBCYgICAADcDSCACIAU3AzggAiAENwMwIAIgAzcDKCACIAEpAzg3A2ggAiABKQMwNwNQIAIgBkIghkIEhDcDQCACIAE1AlBCIIZCBIQ3A2AgAiABMQBYQiCGQgSENwNYQZCCwIAAQQkgAkEoakEJELGAgIAAIQNCACEEDAELQgEhBAsgACADNwMIIAAgBDcDACACQfAAaiSAgICAAAtuAgF/An4jgICAgABBIGsiASSAgICAACAAKQMAEJiAgIAAIQIgASAAQQhqEKeAgIAAAkAgASkDAKdFDQAAAAsgASkDCCEDIAEgAjcDECABIAM3AxggAUEQahClgICAACECIAFBIGokgICAgAAgAgubBAICfwJ+I4CAgIAAQfAAayICJICAgIAAQQAhAwJAA0AgA0EQRg0BIAJB0ABqIANqQgI3AwAgA0EIaiEDDAALCwJAAkACQCABQv8Bg0LMAFINACABQbyBwIAAQQIgAkHQAGpBAhCqgICAACACKQNQIgFC/wGDQssAUg0BIAEQhYCAgAAhBCACQQA2AmggAiABNwNgIAIgBEIgiD4CbCACQcAAaiACQeAAahCrgICAACACKQNAIgFCAlENASABQv////8Pg0IAUg0BIAJBMGogAikDSBCsgICAACACKQMwpw0BAkACQAJAIAIpAzhBoIHAgACtQiCGQgSEQoSAgIAgEIaAgIAAQiCIpw4CAAEECyACKAJoIAIoAmwQrYCAgABBAUsNAyACIAJB4ABqEKuAgIAAIAIpAwAiAUICUQ0DIAFC/////w+DQgBSDQNCACEBIAIpAwgiBEL/AYNCzQBRDQEMAwsgAigCaCACKAJsEK2AgIAAQQFLDQIgAkEgaiACQeAAahCrgICAACACKQMgIgFCAlENAiABQv////8Pg0IAUg0CIAJBEGogAikDKBCsgICAACACKQMQpw0CIAIpAxghBEIBIQELAkAgAikDWCIFQv8Bg0LJAFINACAAIAU3AxAgACAENwMIIAAgATcDAAwDCyAAQgI3AwAMAgsgAEICNwMADAELIABCAjcDAAsgAkHwAGokgICAgAALMgACQCACIARGDQAAAAsgACABrUIghkIEhCADrUIghkIEhCACrUIghkIEhBCVgICAABoLbgIBfwJ+AkACQCABKAIIIgIgASgCDEkNAEICIQMMAQsgASkDACACrUIghkIEhBCNgICAACEEAkAgAkEBaiICRQ0AIAEgAjYCCEIAIQMMAQtB8IfAgABBHBCjgICAAAALIAAgBDcDCCAAIAM3AwALJAEBfyAAIAE3AwggACABp0H/AXEiAkEORyACQcoAR3GtNwMACyEAAkAgASAASQ0AIAEgAGsPC0HgiMCAAEEhEKOAgIAAAAuOAQIBfwF+I4CAgIAAQRBrIgIkgICAgAACQAJAIAEpAwBCAFINAEGRgcCAAEEHEK+AgIAAIQMMAQtBmIHAgABBBRCvgICAACEDCyACIAMgASkDCBCwgICAADcDACACIAEpAxA3AwggAEG8gcCAAEECIAJBAhCxgICAADcDCCAAQgA3AwAgAkEQaiSAgICAAAvGAQIBfgR/AkAgAUEJSw0AQgAhAiABIQMgACEEAkADQCADRQ0BQQEhBQJAIAQtAAAiBkHfAEYNAAJAIAZBUGpB/wFxQQpJDQACQCAGQb9/akH/AXFBGkkNACAGQZ9/akH/AXFBGUsNBSAGQUVqIQUMAgsgBkFLaiEFDAELIAZBUmohBQsgAkIGhiAFrUL/AYOEIQIgA0F/aiEDIARBAWohBAwACwsgAkIIhkIOhA8LIACtQiCGQgSEIAGtQiCGQgSEEJKAgIAACzwBAX8jgICAgABBEGsiAiSAgICAACACIAE3AwggAiAANwMAIAJBAhDDgICAACEBIAJBEGokgICAgAAgAQsvAAJAIAEgA0YNAAAACyAArUIghkIEhCACrUIghkIEhCABrUIghkIEhBCUgICAAAsYAEG8gMCAAEEFEJuAgIAAQgIQnICAgAALSgIBfwF+I4CAgIAAQRBrIgEkgICAgAAgAUG8gMCAAEEFEJ2AgIAAIAEpAwAhAiAAIAEpAwg3AwggACACNwMAIAFBEGokgICAgAALRwICfwF+I4CAgIAAQRBrIgAkgICAgAAgAEHBgMCAAEEIEJqAgIAAIAAoAgAhASAAKQMIIQIgAEEQaiSAgICAACACQgAgARsLEgBBwYDAgABBCCAAEJ+AgIAAC0YCAX8BfiOAgICAAEEQayIAJICAgIAAIABByYDAgABBBRCdgICAACAAKQMIIQEgACkDABCigICAACAAQRBqJICAgIAAIAELEgBBzoDAgABBFCAAEJ+AgIAAC7kEAgJ/B34jgICAgABBoAFrIgIkgICAgAACQAJAAkAgARCYgICAACIBQgEQnICAgAANACAAQgI3AwAMAQsgAUIBEIKAgIAAIQFBACEDAkADQCADQcgARg0BIAJBIGogA2pCAjcDACADQQhqIQMMAAsLIAFC/wGDQswAUg0BIAFBkILAgABBCSACQSBqQQkQqoCAgAAgAkH4AGogAikDIBCpgICAACACKQN4IgFCAlENASACQegAakEIaiACQYgBaiIDKQMANwMAIAIgAikDgAE3A2ggAkH4AGogAikDKBCpgICAACACKQN4IgRCAlENASACQZABakEIaiADKQMANwMAIAIgAikDgAE3A5ABIAJBEGogAikDMBCZgICAACACKAIQDQEgAikDOCIFQv8Bg0IEUg0BIAIpAxghBiACIAIpA0AQmYCAgAAgAigCAA0BIAIpA0giB0L/AYNCzQBSDQEgAikDUCIIQv8Bg0IEUg0BIAhCIIinIgNBA08NASACKQNYIghC/wGDQgRSDQEgAikDYCIJQv8Bg0LIAFINASACKQMIIQogACACKQNoNwMIIAAgAikDkAE3AyAgAEEQaiACQegAakEIaikDADcDACAAQShqIAJBkAFqQQhqKQMANwMAIAAgAzoAWCAAIAVCIIinNgJUIAAgCEIgiKc2AlAgACAKNwNIIAAgBjcDQCAAIAk3AzggACAHNwMwIAAgBDcDGCAAIAE3AwALIAJBoAFqJICAgIAADwsAAAsbACAAEJiAgIAAIAEQpoCAgABCARCDgICAABoLXgIBfwJ+I4CAgIAAQRBrIgAkgICAgAAgABCzgICAAAJAIAApAwAiAVANACAAKQMIIQIgARCigICAACACEIeAgIAAGiAAQRBqJICAgIAADwtCg4CAgBAQu4CAgAAAAAsLACAAEJeAgIAAGgsbAAJAELKAgIAADQBCg4CAgDAQu4CAgAAAAAsLCAAQtoCAgAALMgAgABCIgICAACABEL+AgIAAAkAgAkIAUQ0AEL2AgIAAEIiAgIAAIAJCABDAgICAAAsLxQEDAX8CfgF/I4CAgIAAQTBrIgMkgICAgAAQvYCAgAAhBEGBicCAAEEIEMGAgIAAIQUgAyACQgAQwoCAgAA3AxAgAyABNwMIIAMgADcDAEEAIQYDQAJAIAZBGEcNAEEAIQYCQANAIAZBGEYNASADQRhqIAZqIAMgBmopAwA3AwAgBkEIaiEGDAALCyAEIAUgA0EYakEDEMOAgIAAEMSAgIAAIANBMGokgICAgAAPCyADQRhqIAZqQgI3AwAgBkEIaiEGDAALC7YBAwF/AX4BfyOAgICAAEEgayIEJICAgIAAQYmJwIAAQQQQwYCAgAAhBSAEIAIgAxDCgICAADcDCCAEIAE3AwBBACEGA0ACQCAGQRBHDQBBACEGAkADQCAGQRBGDQEgBEEQaiAGaiAEIAZqKQMANwMAIAZBCGohBgwACwsgACAFIARBEGpBAhDDgICAABDEgICAACAEQSBqJICAgIAADwsgBEEQaiAGakICNwMAIAZBCGohBgwACwsMACAAIAEQr4CAgAALRQACQCAAQoCAgICAgIDAAHxC//////////8AVg0AIAAgAIUgAEI/hyABhYRCAFINACAAQgiGQguEDwsgASAAEJGAgIAACxoAIACtQiCGQgSEIAGtQiCGQgSEEJCAgIAAC1ABAX8jgICAgABBEGsiAySAgICAAAJAIAAgASACEJOAgIAAQv8Bg0ICUQ0AQYyIwIAAIANBD2pBuIjAgAAQxoCAgAAACyADQRBqJICAgIAAC64BAwF/AX4BfyOAgICAAEEgayIAJICAgIAAAkACQBCJgICAACIBp0H/AXEiAkHAAEYNAAJAIAJBBkcNACABQgiIIQEMAgtBjIjAgAAgAEEYakHIiMCAABDGgICAAAALIAEQgYCAgAAhAQsgAEEIaiABQgBC6AdCABDsgICAAAJAIAApAxBCAFINACAAKQMIIQEgAEEgaiSAgICAACABDwtB8IDAgABBIRCjgICAAAALCQAQ14CAgAAAC4ECAgJ/An4jgICAgABBMGsiASSAgICAAEEAIQICQANAIAJBGEYNASABQRhqIAJqQgI3AwAgAkEIaiECDAALCwJAAkAgAEL/AYNCzABSDQAgAEHcgsCAAEEDIAFBGGpBAxCqgICAACABKQMYIgBC/wGDQs0AUg0AIAFBCGogASkDIBCZgICAACABKQMIpw0AIAEpAygiA0L/AYNCzQBSDQAgASkDECEEIAAQh4CAgAAaELKAgIAARQ0BQgMQu4CAgAALAAALQbyAwIAAQQUgABCegICAACAEELWAgIAAQcmAwIAAQQUgAxCegICAAEIAELeAgIAAIAFBMGokgICAgABCAgtPAQF/I4CAgIAAQRBrIgEkgICAgAAgASAAEJmAgIAAAkAgASkDAKdFDQAAAAsgASkDCCEAELqAgIAAIAAQtYCAgAAgAUEQaiSAgICAAEICC6gBAgF/AX4jgICAgABBMGsiAiSAgICAACACQRBqIAAQmYCAgAACQCACKQMQpw0AIAIpAxghACACIAEQyoCAgAAgAikDAKcNACACKQMIIQEQuoCAgABCjryN0AdCju6qluu95wEQpICAgAAhAyAAEJiAgIAAIQAgAiABNwMoIAIgADcDICADIAJBIGoQpYCAgAAQioCAgAAaIAJBMGokgICAgABCAg8LAAALPwEBfkIBIQICQCABQv8Bg0LIAFINACABEI+AgIAAQoCAgIBwg0KAgICAgARSrSECCyAAIAE3AwggACACNwMAC1ABAX8jgICAgABBEGsiASSAgICAACABIAAQyoCAgAACQCABKQMAp0UNAAAACyABKQMIIQAQuoCAgAAgABCLgICAABogAUEQaiSAgICAAEICC7YFBAF/A34CfwV+I4CAgIAAQeABayIBJICAgIAAAkACQAJAAkACQAJAIABC/wGDQssAUg0AELqAgIAAEMWAgIAAIQIQtICAgAAhAxCMgICAACEEIAAQhYCAgABCIIinIQVBACEGQgAhBwJAA0AgBq0iCEIghkIEhCEJIAYgBSAGIAVLG60gCH0hCANAIAhQDQIgAUEQaiAAIAkQjYCAgAAQmYCAgAAgBkEBaiIGRQ0EAkAgASkDEKdFDQBBjIjAgAAgAUGAAWpBgIDAgAAQxoCAgAAACyABQSBqIAEpAxgiChC4gICAACABKQMgQgJRDQEgAUGAAWogAUEgakHgABDugICAABogAiABKQPIASILVA0FAkAgAiALfSILQoC4mSlaDQAgCUKAgICAEHwhCSAIQn98IQgMAQsLIAEgC0KAuJkpgEIAIANCABDsgICAACABKQMIUEUNBSABKQMAIQggASACNwPIASABIAEpA8ABIgkgCSAIIAkgCFQbIgh9Igk3A8ABAkAgCSADWg0AIAFBAToA2AEgBCAKEJiAgIAAEI6AgIAAIQQLIAogAUGAAWoQuYCAgAACQCAHIAh8IgggB1QNACAIIQcMAQsLQaCAwIAAQRwQo4CAgAAACyAHUEUNBAwFCwAAC0GggMCAAEEcEKOAgIAAAAtBsIPAgABBIRCjgICAAAALQfCAwIAAQSEQo4CAgAAAC0KOvI3QB0KO0qr27eyiARCkgICAACEIIAIQmICAgAAhCSABIAA3A4gBIAEgCTcDgAEgCCABQYABahClgICAABCKgICAABoCQCAEEIWAgIAAQoCAgIAQVA0AQo68jdAHQo7S6vSsreP1OBCkgICAACAEEIqAgIAAGgsQvYCAgAAQiICAgAAgB0IAEMCAgIAACyABQeABaiSAgICAAEICC/0IBAJ/B34EfwJ+I4CAgIAAQYADayICJICAgIAAQQAhAwJAA0AgA0EwRg0BIAJBmAJqIANqQgI3AwAgA0EIaiEDDAALCwJAIABC/wGDQswAUg0AIABB9ILAgABBBiACQZgCakEGEKqAgIAAIAJBIGogAikDmAIQqYCAgAAgAikDICIEQgJRDQAgAkGoAWpBCGogAkEwaiIDKQMANwMAIAIgAikDKDcDqAEgAkEgaiACKQOgAhCpgICAACACKQMgIgVCAlENACACQbgBakEIaiADKQMANwMAIAIgAikDKDcDuAEgAikDqAIiBkL/AYNCBFINACACKQOwAiIAQv8Bg0LNAFINACACKQO4AiIHQv8Bg0IEUg0AIAIpA8ACIghC/wGDQsgAUg0AIAJBmAFqQQhqIAJBqAFqQQhqKQMANwMAIAJBiAFqQQhqIAJBuAFqQQhqKQMANwMAIAIgAikDqAE3A5gBIAIgAikDuAE3A4gBIAJBEGogARCZgICAACACKAIQDQAgAikDGCEJELyAgIAAIAAQh4CAgAAaAkACQAJAAkAgCRC0gICAACIKVA0AIAZCIIinIgNBBUkNAQJAIAdCIIinIgsNAEKDgICA4AAQu4CAgAAMBQsgCBCPgICAAEIgiKdBgBBLDQIgACAJIAoQvoCAgAAgAkHOgMCAAEEUEJqAgIAAIAIpAwhCACACKAIAG0IBfCIBUA0DEMWAgIAAIQYgAkG4AWpBEGoiDCACQZgBakEIaikDADcDACACQbgBakEgaiINIAIpA4gBNwMAIAJBuAFqQShqIg4gAkGIAWpBCGopAwA3AwAgAiAENwO4ASACIAA3A+gBIAIgBTcD0AEgAiADNgKMAiACIAs2AogCIAJBADoAkAIgAiAJIAp9Igk3A/gBIAIgCDcD8AEgAiAGNwOAAiACIAIpA5gBNwPAASABIAJBuAFqELmAgIAAIAEQt4CAgAAgDCkDACEKIA0pAwAhByAOKQMAIQ8gAikDwAEhECACQdACaiAANwMAIAJB9AJqIAM2AgAgAkHwAmogCzYCACACQcgCaiAPNwMAIAJBmAJqQShqIAc3AwAgAkGYAmpBIGogBTcDACACQbACaiAKNwMAIAJBmAJqQRBqIBA3AwAgAkH4AmpBADoAACACQeACaiAJNwMAIAJB2AJqIAg3AwAgAkHoAmogBjcDACACIAE3A5gCIAIgBDcDoAJCjryN0AdCjtLq3Km9owEQpICAgAAgAkGYAmoQqICAgAAQioCAgAAaIAJBADoAgAEgAiADNgJ8IAIgCzYCeCACIAY3A3AgAiAJNwNoIAIgCDcDYCACIAA3A1ggAiAPNwNQIAIgBzcDSCACIAU3A0AgAiAKNwM4IAIgEDcDMCACIAQ3AyggAiABNwMgIAJBIGoQqICAgAAhACACQYADaiSAgICAACAADwtCg4CAgMAAELuAgIAADAMLQoOAgIDQABC7gICAAAwCC0KDgICA8AAQu4CAgAAMAQtBoIDAgABBHBCjgICAAAALAAALuQMCAX8CfiOAgICAAEHgAWsiAySAgICAAAJAIABC/wGDQs0AUg0AIANBEGogARCZgICAACADKAIQDQAgAykDGCEEIAMgAhCZgICAACADKAIADQAgAykDCCEBELyAgIAAIAAQh4CAgAAaAkAgAUIAUg0AQoOAgIDAABC7gICAAAwBCyADQYABaiAEELiAgIAAAkAgAykDgAFCAlINAEKDgICAIBC7gICAAAwBCyADQSBqIANBgAFqQeAAEO6AgIAAGhC0gICAACEFQgAhAgJAAkACQAJAAkAgAy0AeEF/ag4CAAIBCyAFIAFWDQIgA0EAOgB4IAUhAgsgACABIAIQvoCAgAAgAykDYCIAIAEgAn18IgIgAFQNAiADIAI3A2AgBCADQSBqELmAgIAAQo68jdAHQo7yrpzd1qYBEKSAgIAAIQAgBBCYgICAACEEIAMgARCYgICAADcDiAEgAyAENwOAASAAIANBgAFqEKWAgIAAEIqAgIAAGiADQeABaiSAgICAAEICDwtCg4CAgIABELuAgIAADAILQoOAgIDAABC7gICAAAwBC0GggMCAAEEcEKOAgIAAAAsAAAuAAgIBfwF+I4CAgIAAQdABayIBJICAgIAAIAEgABCZgICAAAJAAkAgASgCAA0AIAEpAwghABC8gICAACABQfAAaiAAELiAgIAAAkAgASkDcEICUg0AQoOAgIAgELuAgIAADAELIAFBEGogAUHwAGpB4AAQ7oCAgAAaIAEpA0AiAhCHgICAABogAS0AaEUNAUKDgICAgAEQu4CAgAALAAALEIiAgIAAIAIgASkDUBC/gICAACABQgA3A1AgAUECOgBoIAAgAUEQahC5gICAAEKOvI3QB0KO0uq4rMXOzSgQpICAgAAgABCYgICAABCKgICAABogAUHQAWokgICAgABCAguRAQEBfyOAgICAAEHQAWsiASSAgICAACABIAAQmYCAgAACQAJAIAEpAwCnDQAgASkDCCEAELyAgIAAIAFB8ABqIAAQuICAgAAgASkD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CwtBASEJIAchDCACIQAgByACRg0CCwJAAkAgBS0AAEUNACAEQaCEwIAAQQQgAygCDBGAgICAAAANAQsgASAHaiELIAAgB2shCkEAIQ0CQCAAIAdGDQAgCiALakF/ai0AAEEKRiENCyAFIA06AAAgDCEHIAQgCyAKIAMoAgwRgICAgAAARQ0BCwtBASEGCyAGC1gBAn8gACgCBCECIAAoAgAhAwJAIAAoAggiAC0AAEUNACADQaCEwIAAQQQgAigCDBGAgICAAABFDQBBAQ8LIAAgAUEKRjoAACADIAEgAigCEBGBgICAAAALEgAgAEGIhMCAACABENyAgIAACw4AIAAgASACENyAgIAAC9oCAQV/I4CAgIAAQRBrIgIkgICAgABBASEDAkAgASgCFCIEQYSGwIAAQQ0gAUEYaigCACIFKAIMIgYRgICAgAAADQACQCABLQAcQQRxDQAgBEGkhMCAAEEDIAYRgICAgAAADQEgBEH3hcCAAEEEIAYRgICAgAAADQEgBEGDhMCAAEECIAYRgICAgAAADQEgACAEIAUQ44CAgAANASAEQa2EwIAAQQIgBhGAgICAAAAhAwwBCyAEQaeEwIAAQQMgBhGAgICAAAANACACIAU2AgQgAiAENgIAQQEhAyACQQE6AA8gAiACQQ9qNgIIIAJB94XAgABBBBDegICAAA0AIAJBg4TAgABBAhDegICAAA0AIAAgAkGIhMCAABDjgICAAA0AQQEhAyACQaqEwIAAQQIQ3oCAgAANACAEQayEwIAAQQEgBhGAgICAAAAhAwsgAkEQaiSAgICAACADCzAAIAEgAC0AAEECdCIAQciGwIAAaigCACAAQbSGwIAAaigCACACKAIMEYCAgIAAAAsiACAAKAIAIgCtQgAgAKx9IABBf0oiABsgACABENiAgIAACxQAIAEgACgCACAAKAIEENuAgIAAC7EGAwF/AX4CfyOAgICAAEHgAGsiAiSAgICAACACIAApAwAiA6ciAEEIdiIENgIgIAIgA0IgiKciBTYCJAJAAkACQAJAIABB/xNLDQAgAEGAAkkNASACQRBqIAQQ54CAgAAgAigCFCEAIAIoAhAhBAJAIAVBCk8NACACIAA2AiwgAiAENgIoIAJBCGogBRDogICAACACQdAAakEMakGCgICAADYCACACQThqQQxqQgI3AgAg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",
4
- "interface": {
5
- "unions": [
6
- {
7
- "name": "Asset",
8
- "cases": {
9
- "Stellar": [
10
- "address"
11
- ],
12
- "Other": [
13
- "symbol"
14
- ]
15
- }
16
- }
17
- ],
18
- "structs": [
19
- {
20
- "name": "TickerAsset",
21
- "fields": [
22
- {
23
- "name": "asset",
24
- "type": "Asset"
25
- },
26
- {
27
- "name": "source",
28
- "type": "string"
29
- }
30
- ]
31
- },
32
- {
33
- "name": "Subscription",
34
- "fields": [
35
- {
36
- "name": "asset1",
37
- "type": "TickerAsset"
38
- },
39
- {
40
- "name": "asset2",
41
- "type": "TickerAsset"
42
- },
43
- {
44
- "name": "balance",
45
- "type": "u64"
46
- },
47
- {
48
- "name": "heartbeat",
49
- "type": "u32"
50
- },
51
- {
52
- "name": "last_charge",
53
- "type": "u64"
54
- },
55
- {
56
- "name": "owner",
57
- "type": "address"
58
- },
59
- {
60
- "name": "status",
61
- "type": "SubscriptionStatus"
62
- },
63
- {
64
- "name": "threshold",
65
- "type": "u32"
66
- },
67
- {
68
- "name": "webhook",
69
- "type": "bytes"
70
- }
71
- ]
72
- },
73
- {
74
- "name": "ConfigData",
75
- "fields": [
76
- {
77
- "name": "admin",
78
- "type": "address"
79
- },
80
- {
81
- "name": "fee",
82
- "type": "u64"
83
- },
84
- {
85
- "name": "token",
86
- "type": "address"
87
- }
88
- ]
89
- },
90
- {
91
- "name": "CreateSubscription",
92
- "fields": [
93
- {
94
- "name": "asset1",
95
- "type": "TickerAsset"
96
- },
97
- {
98
- "name": "asset2",
99
- "type": "TickerAsset"
100
- },
101
- {
102
- "name": "heartbeat",
103
- "type": "u32"
104
- },
105
- {
106
- "name": "owner",
107
- "type": "address"
108
- },
109
- {
110
- "name": "threshold",
111
- "type": "u32"
112
- },
113
- {
114
- "name": "webhook",
115
- "type": "bytes"
116
- }
117
- ]
118
- }
119
- ],
120
- "errors": [
121
- {
122
- "name": "Error",
123
- "cases": [
124
- {
125
- "name": "AlreadyInitialized",
126
- "value": 0
127
- },
128
- {
129
- "name": "Unauthorized",
130
- "value": 1
131
- },
132
- {
133
- "name": "SubscriptionNotFound",
134
- "value": 2
135
- },
136
- {
137
- "name": "NotInitialized",
138
- "value": 3
139
- },
140
- {
141
- "name": "InvalidAmount",
142
- "value": 4
143
- },
144
- {
145
- "name": "InvalidHeartbeat",
146
- "value": 5
147
- },
148
- {
149
- "name": "InvalidThreshold",
150
- "value": 6
151
- },
152
- {
153
- "name": "WebhookTooLong",
154
- "value": 7
155
- },
156
- {
157
- "name": "InvalidSubscriptionStatusError",
158
- "value": 8
159
- }
160
- ]
161
- }
162
- ],
163
- "enums": [
164
- {
165
- "name": "SubscriptionStatus",
166
- "cases": {
167
- "Active": 0,
168
- "Suspended": 1,
169
- "Cancelled": 2
170
- }
171
- }
172
- ],
173
- "functions": [
174
- {
175
- "name": "config",
176
- "inputs": [
177
- {
178
- "name": "config",
179
- "type": "ConfigData"
180
- }
181
- ],
182
- "outputs": []
183
- },
184
- {
185
- "name": "set_fee",
186
- "inputs": [
187
- {
188
- "name": "fee",
189
- "type": "u64"
190
- }
191
- ],
192
- "outputs": []
193
- },
194
- {
195
- "name": "trigger",
196
- "inputs": [
197
- {
198
- "name": "timestamp",
199
- "type": "u64"
200
- },
201
- {
202
- "name": "trigger_hash",
203
- "type": "bytesn<32>"
204
- }
205
- ],
206
- "outputs": []
207
- },
208
- {
209
- "name": "update_contract",
210
- "inputs": [
211
- {
212
- "name": "wasm_hash",
213
- "type": "bytesn<32>"
214
- }
215
- ],
216
- "outputs": []
217
- },
218
- {
219
- "name": "charge",
220
- "inputs": [
221
- {
222
- "name": "subscription_ids",
223
- "type": "vec<u64>"
224
- }
225
- ],
226
- "outputs": []
227
- },
228
- {
229
- "name": "create_subscription",
230
- "inputs": [
231
- {
232
- "name": "new_subscription",
233
- "type": "CreateSubscription"
234
- },
235
- {
236
- "name": "amount",
237
- "type": "u64"
238
- }
239
- ],
240
- "outputs": [
241
- "tuple<u64,Subscription>"
242
- ]
243
- },
244
- {
245
- "name": "deposit",
246
- "inputs": [
247
- {
248
- "name": "from",
249
- "type": "address"
250
- },
251
- {
252
- "name": "subscription_id",
253
- "type": "u64"
254
- },
255
- {
256
- "name": "amount",
257
- "type": "u64"
258
- }
259
- ],
260
- "outputs": []
261
- },
262
- {
263
- "name": "cancel",
264
- "inputs": [
265
- {
266
- "name": "subscription_id",
267
- "type": "u64"
268
- }
269
- ],
270
- "outputs": []
271
- },
272
- {
273
- "name": "get_subscription",
274
- "inputs": [
275
- {
276
- "name": "subscription_id",
277
- "type": "u64"
278
- }
279
- ],
280
- "outputs": [
281
- "Subscription"
282
- ]
283
- },
284
- {
285
- "name": "admin",
286
- "inputs": [],
287
- "outputs": [
288
- "option<address>"
289
- ]
290
- },
291
- {
292
- "name": "version",
293
- "inputs": [],
294
- "outputs": [
295
- "u32"
296
- ]
297
- },
298
- {
299
- "name": "fee",
300
- "inputs": [],
301
- "outputs": [
302
- "u64"
303
- ]
304
- },
305
- {
306
- "name": "token",
307
- "inputs": [],
308
- "outputs": [
309
- "address"
310
- ]
311
- }
312
- ],
313
- "interfaceVersion": "85899345920",
314
- "rustVersion": "1.74.0",
315
- "sdkVersion": "20.5.0#9e2c3022b4355b224a7a814e13ba51761eeb14bb"
316
- }
317
- }
318
- }
@@ -1,10 +0,0 @@
1
- import examples from './example-contracts.json'
2
- import {parseContractMetadata} from '../index'
3
-
4
- describe('Parser', () => {
5
- test('parse subscription example meta', () => {
6
- const {subscription} = examples
7
- const parsed = parseContractMetadata(Buffer.from(subscription.wasm, 'base64'))
8
- expect(parsed).toEqual(subscription.interface)
9
- })
10
- })