@lukso/transaction-decoder 1.0.1-dev.0f1bea5
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/LICENSE +201 -0
- package/README.md +486 -0
- package/dist/browser.cjs +6912 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +6 -0
- package/dist/browser.d.ts +6 -0
- package/dist/browser.js +131 -0
- package/dist/browser.js.map +1 -0
- package/dist/cdn/transaction-decoder.global.js +296 -0
- package/dist/cdn/transaction-decoder.global.js.map +1 -0
- package/dist/chunk-GGBHTWJL.js +437 -0
- package/dist/chunk-GGBHTWJL.js.map +1 -0
- package/dist/chunk-GXZOF3QY.js +839 -0
- package/dist/chunk-GXZOF3QY.js.map +1 -0
- package/dist/chunk-LJ6ES5XF.js +776 -0
- package/dist/chunk-LJ6ES5XF.js.map +1 -0
- package/dist/chunk-XVHJWV5U.js +4925 -0
- package/dist/chunk-XVHJWV5U.js.map +1 -0
- package/dist/data.cjs +5518 -0
- package/dist/data.cjs.map +1 -0
- package/dist/data.d.cts +43 -0
- package/dist/data.d.ts +43 -0
- package/dist/data.js +55 -0
- package/dist/data.js.map +1 -0
- package/dist/index-BzXh7poJ.d.cts +524 -0
- package/dist/index-BzXh7poJ.d.ts +524 -0
- package/dist/index.cjs +6912 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +756 -0
- package/dist/index.d.ts +756 -0
- package/dist/index.js +131 -0
- package/dist/index.js.map +1 -0
- package/dist/server.cjs +5644 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +217 -0
- package/dist/server.d.ts +217 -0
- package/dist/server.js +644 -0
- package/dist/server.js.map +1 -0
- package/dist/utils-CBAkjQh3.d.cts +108 -0
- package/dist/utils-xT9-km0r.d.ts +108 -0
- package/package.json +101 -0
- package/src/browser.ts +13 -0
- package/src/client/resolveAddresses.ts +157 -0
- package/src/core/addressCollector.ts +153 -0
- package/src/core/addressResolver.ts +135 -0
- package/src/core/dataModel.ts +888 -0
- package/src/core/instance.ts +33 -0
- package/src/core/integrateDecoder.ts +325 -0
- package/src/data.ts +70 -0
- package/src/decoder/GENERATOR_PROPOSAL.md +182 -0
- package/src/decoder/THREE_PHASE_EXAMPLE.md +108 -0
- package/src/decoder/aggregation.ts +218 -0
- package/src/decoder/browserCache.ts +237 -0
- package/src/decoder/cache/README.md +126 -0
- package/src/decoder/cache/index.ts +44 -0
- package/src/decoder/cache.ts +139 -0
- package/src/decoder/constants.ts +125 -0
- package/src/decoder/decodeTransaction.ts +292 -0
- package/src/decoder/errors.ts +95 -0
- package/src/decoder/events.ts +192 -0
- package/src/decoder/functionSignature.ts +344 -0
- package/src/decoder/getDataFromExternalSources.ts +248 -0
- package/src/decoder/graphqlWS.ts +22 -0
- package/src/decoder/interfaces.ts +185 -0
- package/src/decoder/keyValue.ts +5 -0
- package/src/decoder/kvCache.ts +241 -0
- package/src/decoder/lruCache.ts +184 -0
- package/src/decoder/lsp7Mint.test.ts +179 -0
- package/src/decoder/lsp7TransferBatch.test.ts +105 -0
- package/src/decoder/plugins/RegistryAbi.ts +562 -0
- package/src/decoder/plugins/enhanceBurntPix.ts +132 -0
- package/src/decoder/plugins/enhanceGraffiti.ts +70 -0
- package/src/decoder/plugins/enhanceLSP0ERC725Account.ts +179 -0
- package/src/decoder/plugins/enhanceLSP26FollowerSystem.ts +88 -0
- package/src/decoder/plugins/enhanceLSP6KeyManager.ts +231 -0
- package/src/decoder/plugins/enhanceLSP7DigitalAsset.ts +165 -0
- package/src/decoder/plugins/enhanceLSP8IdentifiableDigitalAsset.ts +170 -0
- package/src/decoder/plugins/enhanceLSP9Vault.ts +57 -0
- package/src/decoder/plugins/enhanceRetrieveAbi.ts +85 -0
- package/src/decoder/plugins/enhanceSetData.ts +135 -0
- package/src/decoder/plugins/index.ts +99 -0
- package/src/decoder/plugins/schemaDefault.ts +318 -0
- package/src/decoder/plugins/standardPlugin.ts +202 -0
- package/src/decoder/registry.ts +322 -0
- package/src/decoder/singleGQL.ts +293 -0
- package/src/decoder/transaction.ts +198 -0
- package/src/decoder/types.ts +465 -0
- package/src/decoder/utils.ts +212 -0
- package/src/example/usage.ts +172 -0
- package/src/index.ts +174 -0
- package/src/server/addressResolver.ts +68 -0
- package/src/server/caches.ts +209 -0
- package/src/server/decodeTransactionSync.ts +156 -0
- package/src/server/decodeTransactionsBatch.ts +207 -0
- package/src/server/finishDecoding.ts +116 -0
- package/src/server/index.ts +81 -0
- package/src/server/lsp23Resolver.test.ts +46 -0
- package/src/server/lsp23Resolver.ts +419 -0
- package/src/server/types.ts +168 -0
- package/src/server.ts +22 -0
- package/src/shared/addressResolver.ts +651 -0
- package/src/shared/cache.ts +144 -0
- package/src/shared/constants.ts +21 -0
- package/src/stubs/tty.ts +13 -0
- package/src/stubs/util.ts +42 -0
- package/src/types/index.ts +154 -0
- package/src/types/provider.ts +46 -0
- package/src/umd.ts +13 -0
- package/src/utils/debug.ts +49 -0
- package/src/utils/json-bigint.ts +47 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRU Cache implementation of DecoderCache interface
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { LRUCache } from 'lru-cache'
|
|
6
|
+
import type { CacheEntry, CacheOptions, DecoderCache } from './cache'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Options for creating an LRU cache instance
|
|
10
|
+
*/
|
|
11
|
+
export interface LRUCacheOptions {
|
|
12
|
+
/** Maximum number of items in cache */
|
|
13
|
+
max?: number
|
|
14
|
+
/** Default TTL in milliseconds */
|
|
15
|
+
ttl?: number
|
|
16
|
+
/** Default error TTL in milliseconds */
|
|
17
|
+
errorTTL?: number
|
|
18
|
+
/** Default stale-while-revalidate time in milliseconds */
|
|
19
|
+
staleWhileRevalidate?: number
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* LRU implementation of DecoderCache
|
|
24
|
+
*/
|
|
25
|
+
export class LRUDecoderCache implements DecoderCache {
|
|
26
|
+
private cache: LRUCache<string, CacheEntry<unknown>>
|
|
27
|
+
private promises: Map<string, Promise<unknown>>
|
|
28
|
+
private defaultTTL: number
|
|
29
|
+
private defaultErrorTTL: number
|
|
30
|
+
private defaultStaleWhileRevalidate?: number
|
|
31
|
+
|
|
32
|
+
constructor(options: LRUCacheOptions = {}) {
|
|
33
|
+
this.defaultTTL = options.ttl ?? 5 * 60 * 1000 // 5 minutes
|
|
34
|
+
this.defaultErrorTTL = options.errorTTL ?? 30 * 1000 // 30 seconds
|
|
35
|
+
this.defaultStaleWhileRevalidate = options.staleWhileRevalidate
|
|
36
|
+
|
|
37
|
+
this.cache = new LRUCache({
|
|
38
|
+
max: options.max ?? 1000,
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
this.promises = new Map()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async get<T>(key: string): Promise<CacheEntry<T> | undefined> {
|
|
45
|
+
const entry = this.cache.get(key) as CacheEntry<T> | undefined
|
|
46
|
+
if (!entry) {
|
|
47
|
+
return undefined
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Check if expired
|
|
51
|
+
if (entry.expires && Date.now() > entry.expires) {
|
|
52
|
+
this.cache.delete(key)
|
|
53
|
+
return undefined
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return entry
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async set<T>(key: string, value: T, options?: CacheOptions): Promise<void> {
|
|
60
|
+
const now = Date.now()
|
|
61
|
+
const ttl =
|
|
62
|
+
options?.ttl ?? (options?.errorTTL ? options.errorTTL : this.defaultTTL)
|
|
63
|
+
const isError = options?.errorTTL !== undefined
|
|
64
|
+
|
|
65
|
+
const entry: CacheEntry<T> = {
|
|
66
|
+
value,
|
|
67
|
+
expires: now + ttl,
|
|
68
|
+
isError,
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const staleWhileRevalidate =
|
|
72
|
+
options?.staleWhileRevalidate ?? this.defaultStaleWhileRevalidate
|
|
73
|
+
if (staleWhileRevalidate) {
|
|
74
|
+
entry.stale = now + ttl + staleWhileRevalidate
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.cache.set(key, entry as CacheEntry<unknown>)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async delete(key: string): Promise<void> {
|
|
81
|
+
this.cache.delete(key)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async getMany<T>(keys: string[]): Promise<Map<string, CacheEntry<T>>> {
|
|
85
|
+
const result = new Map<string, CacheEntry<T>>()
|
|
86
|
+
|
|
87
|
+
for (const key of keys) {
|
|
88
|
+
const entry = await this.get<T>(key)
|
|
89
|
+
if (entry) {
|
|
90
|
+
result.set(key, entry)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return result
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async setMany<T>(
|
|
98
|
+
entries: Array<{ key: string; value: T; options?: CacheOptions }>
|
|
99
|
+
): Promise<void> {
|
|
100
|
+
for (const { key, value, options } of entries) {
|
|
101
|
+
await this.set(key, value, options)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async clear(): Promise<void> {
|
|
106
|
+
this.cache.clear()
|
|
107
|
+
this.promises.clear()
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async getOrSet<T>(
|
|
111
|
+
key: string,
|
|
112
|
+
factory: (signal?: AbortSignal) => Promise<T>,
|
|
113
|
+
options?: CacheOptions & { signal?: AbortSignal }
|
|
114
|
+
): Promise<T> {
|
|
115
|
+
// Check cache first
|
|
116
|
+
const cached = await this.get<T>(key)
|
|
117
|
+
const now = Date.now()
|
|
118
|
+
|
|
119
|
+
// If we have a valid (non-expired) entry, return it
|
|
120
|
+
if (cached && (!cached.expires || now < cached.expires)) {
|
|
121
|
+
return cached.value
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// If we have a stale entry and stale-while-revalidate is enabled
|
|
125
|
+
if (
|
|
126
|
+
cached &&
|
|
127
|
+
cached.stale &&
|
|
128
|
+
now < cached.stale &&
|
|
129
|
+
!this.promises.has(key)
|
|
130
|
+
) {
|
|
131
|
+
// Return stale value and revalidate in background
|
|
132
|
+
const backgroundPromise = factory(options?.signal)
|
|
133
|
+
.then(async (fresh) => {
|
|
134
|
+
await this.set(key, fresh, options)
|
|
135
|
+
return fresh
|
|
136
|
+
})
|
|
137
|
+
.catch(() => {
|
|
138
|
+
// On error, keep the stale value
|
|
139
|
+
return cached.value
|
|
140
|
+
})
|
|
141
|
+
.finally(() => {
|
|
142
|
+
this.promises.delete(key)
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
this.promises.set(key, backgroundPromise)
|
|
146
|
+
return cached.value
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Check if we have an in-flight promise
|
|
150
|
+
const existingPromise = this.promises.get(key) as Promise<T> | undefined
|
|
151
|
+
if (existingPromise) {
|
|
152
|
+
return existingPromise
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// No valid cache entry, fetch new value
|
|
156
|
+
const promise = factory(options?.signal)
|
|
157
|
+
.then(async (value) => {
|
|
158
|
+
await this.set(key, value, options)
|
|
159
|
+
return value
|
|
160
|
+
})
|
|
161
|
+
.catch(async (error) => {
|
|
162
|
+
// Cache the error with shorter TTL
|
|
163
|
+
await this.set(key, error as T, {
|
|
164
|
+
...options,
|
|
165
|
+
ttl: options?.errorTTL ?? this.defaultErrorTTL,
|
|
166
|
+
errorTTL: options?.errorTTL ?? this.defaultErrorTTL,
|
|
167
|
+
})
|
|
168
|
+
throw error
|
|
169
|
+
})
|
|
170
|
+
.finally(() => {
|
|
171
|
+
this.promises.delete(key)
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
this.promises.set(key, promise)
|
|
175
|
+
return promise as Promise<T>
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Create a default LRU cache instance
|
|
181
|
+
*/
|
|
182
|
+
export function createLRUCache(options?: LRUCacheOptions): DecoderCache {
|
|
183
|
+
return new LRUDecoderCache(options)
|
|
184
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { lukso } from 'viem/chains'
|
|
2
|
+
import { describe, expect, it } from 'vitest'
|
|
3
|
+
import { JSONbigString } from '../browser'
|
|
4
|
+
import { defaultSchemaPlugins } from './plugins'
|
|
5
|
+
import { pluginRegistry } from './registry'
|
|
6
|
+
import { decodeTransaction as decodeTransactionCore } from './transaction'
|
|
7
|
+
import type { DecoderResult } from './types'
|
|
8
|
+
|
|
9
|
+
describe('LSP7 Mint Transaction Decoding', () => {
|
|
10
|
+
it('should decode LSP7 mint transaction 0xabf5859b52f9dd7c5dd942751bc77418a1f0bc5bc8447694b726eed8dd260a8c', async () => {
|
|
11
|
+
// This is a Universal Profile executing a mint operation on an LSP7 token
|
|
12
|
+
// The transaction goes through the UP's execute function, which then calls the LSP7 contract
|
|
13
|
+
const transaction = {
|
|
14
|
+
blockHash:
|
|
15
|
+
'0x5aa1f100805b57a3b8672c1d5e03e408661dda2a8a5a30063e8f3c4283c7b642',
|
|
16
|
+
blockNumber: 2313514n,
|
|
17
|
+
blockTimestamp: 1713383508,
|
|
18
|
+
transactionIndex: 0,
|
|
19
|
+
transactionHash:
|
|
20
|
+
'0xabf5859b52f9dd7c5dd942751bc77418a1f0bc5bc8447694b726eed8dd260a8c',
|
|
21
|
+
status: 1,
|
|
22
|
+
gasUsed: '186069',
|
|
23
|
+
gasPrice: '1000000001',
|
|
24
|
+
to: '0x81a904879f657142d9b5c7e875c786717e2125c0', // Universal Profile
|
|
25
|
+
from: '0x879bc4b03689d43133da2e2029d6d01573a39c36', // Controller/EOA
|
|
26
|
+
value: 0n,
|
|
27
|
+
input:
|
|
28
|
+
'0x7580d920000000000000000000000000da9b727f1718f128008ad025828e7fecfaa8a37b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000',
|
|
29
|
+
args: [],
|
|
30
|
+
logs: [
|
|
31
|
+
{
|
|
32
|
+
topics: [
|
|
33
|
+
'0xc0a62328f6bf5e3172bb1fcb2019f54b2c523b6a48e3513a2298fbf0150b781e',
|
|
34
|
+
'0x000000000000000000000000a5467dfe7019bf2c7c5f7a707711b9d4cad118c8',
|
|
35
|
+
'0x0000000000000000000000000000000000000000000000000000000000000000',
|
|
36
|
+
'0x9790242100000000000000000000000000000000000000000000000000000000',
|
|
37
|
+
],
|
|
38
|
+
data: '0x',
|
|
39
|
+
address: '0x3609de903f8220620773014b51220b66f761e158',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
topics: [
|
|
43
|
+
'0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2',
|
|
44
|
+
'0x6460ee3c0aac563ccbf76d6e1d07bada78e3a9514e6382b736ed3f478ab7b90b',
|
|
45
|
+
],
|
|
46
|
+
data: '0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000c00000000000000000000000000000000',
|
|
47
|
+
address: '0xda9b727f1718f128008ad025828e7fecfaa8a37b',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
topics: [
|
|
51
|
+
'0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2',
|
|
52
|
+
'0x6460ee3c0aac563ccbf76d6e1d07bada0000000000000000000000000000000b',
|
|
53
|
+
],
|
|
54
|
+
data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001481a904879f657142d9b5c7e875c786717e2125c0000000000000000000000000',
|
|
55
|
+
address: '0xda9b727f1718f128008ad025828e7fecfaa8a37b',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
topics: [
|
|
59
|
+
'0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2',
|
|
60
|
+
'0x812c4334633eb816c80d000081a904879f657142d9b5c7e875c786717e2125c0',
|
|
61
|
+
],
|
|
62
|
+
data: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000014daa746b70000000000000000000000000000000b000000000000000000000000',
|
|
63
|
+
address: '0xda9b727f1718f128008ad025828e7fecfaa8a37b',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
topics: [
|
|
67
|
+
'0x9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2',
|
|
68
|
+
'0x00000000000000000000000081a904879f657142d9b5c7e875c786717e2125c0',
|
|
69
|
+
'0x0000000000000000000000000000000000000000000000000000000000000000',
|
|
70
|
+
'0x20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c',
|
|
71
|
+
],
|
|
72
|
+
data: '0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000879bc4b03689d43133da2e2029d6d01573a39c360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da9b727f1718f128008ad025828e7fecfaa8a37b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
|
73
|
+
address: '0xda9b727f1718f128008ad025828e7fecfaa8a37b',
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
timeTaken: 45,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const allPlugins = await pluginRegistry.getAll()
|
|
80
|
+
const wrappers: DecoderResult[] = []
|
|
81
|
+
const result = await decodeTransactionCore(
|
|
82
|
+
transaction as unknown as DecoderResult,
|
|
83
|
+
{
|
|
84
|
+
async: true,
|
|
85
|
+
preferError: false,
|
|
86
|
+
chain: lukso,
|
|
87
|
+
plugins: allPlugins,
|
|
88
|
+
schemaPlugins: defaultSchemaPlugins,
|
|
89
|
+
wrappers,
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
// Log the result to understand what we're getting
|
|
94
|
+
console.log(
|
|
95
|
+
'\nDecoding result:',
|
|
96
|
+
JSONbigString.stringify(
|
|
97
|
+
{
|
|
98
|
+
standard: result?.standard,
|
|
99
|
+
resultType: result?.resultType,
|
|
100
|
+
sig: result?.sig,
|
|
101
|
+
functionName: result?.functionName,
|
|
102
|
+
to: result?.to,
|
|
103
|
+
from: result?.from,
|
|
104
|
+
wrappers: wrappers.map((w) => ({
|
|
105
|
+
standard: w.standard,
|
|
106
|
+
resultType: w.resultType,
|
|
107
|
+
functionName: w.functionName,
|
|
108
|
+
to: w.to,
|
|
109
|
+
})),
|
|
110
|
+
},
|
|
111
|
+
null,
|
|
112
|
+
2
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
// Log full result for debugging
|
|
117
|
+
console.log('\nFull result:', JSONbigString.stringify(result, null, 2))
|
|
118
|
+
|
|
119
|
+
// Log wrappers if they exist
|
|
120
|
+
if (wrappers.length > 0) {
|
|
121
|
+
console.log('\nWrappers:', JSONbigString.stringify(wrappers, null, 2))
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Should decode successfully
|
|
125
|
+
expect(result).toBeDefined()
|
|
126
|
+
|
|
127
|
+
// The transaction signature is 0x7580d920 which is not in standard ABIs
|
|
128
|
+
// This appears to be a custom mint function on a Universal Profile
|
|
129
|
+
// The decoder marks it as 'unknown' standard and 'raw' type because
|
|
130
|
+
// the function signature is not in the standard LSP0 or LSP7 ABIs
|
|
131
|
+
expect(result?.sig).toBe('0x7580d920')
|
|
132
|
+
expect(result?.standard).toBe('LSP7DigitalAsset')
|
|
133
|
+
expect(result?.resultType).toBe('execute')
|
|
134
|
+
|
|
135
|
+
// Verify the transaction went to a Universal Profile
|
|
136
|
+
expect(result?.to).toBe('0x81a904879f657142d9b5c7e875c786717e2125c0')
|
|
137
|
+
|
|
138
|
+
// Check the decoded logs to understand what happened
|
|
139
|
+
expect(result?.logs).toBeDefined()
|
|
140
|
+
expect(result?.logs?.length).toBeGreaterThan(0)
|
|
141
|
+
|
|
142
|
+
// Look for DataChanged events (LSP7 metadata updates during mint)
|
|
143
|
+
const dataChangedLogs =
|
|
144
|
+
result?.logs?.filter((log: any) => log.eventName === 'DataChanged') || []
|
|
145
|
+
expect(dataChangedLogs.length).toBeGreaterThan(0)
|
|
146
|
+
console.log(`\nFound ${dataChangedLogs.length} DataChanged events`)
|
|
147
|
+
|
|
148
|
+
// Look for UniversalReceiver event (confirms the mint was received)
|
|
149
|
+
// UniversalReceiver signature: 0x9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2
|
|
150
|
+
const universalReceiverLog = result?.logs?.find(
|
|
151
|
+
(log: any) => log.eventName === 'UniversalReceiver'
|
|
152
|
+
)
|
|
153
|
+
expect(universalReceiverLog).toBeDefined()
|
|
154
|
+
expect(universalReceiverLog?.address).toBe(
|
|
155
|
+
'0xda9b727f1718f128008ad025828e7fecfaa8a37b'
|
|
156
|
+
) // LSP7 token contract
|
|
157
|
+
|
|
158
|
+
// Verify the UniversalReceiver typeId indicates this is a mint
|
|
159
|
+
// typeId 0x20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c = _TYPEID_LSP7_TOKENSSENDER
|
|
160
|
+
expect(universalReceiverLog?.args?.[2]?.value).toBe(
|
|
161
|
+
'0x20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c'
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
// Verify the 'from' address in UniversalReceiver (the minter, which is the UP)
|
|
165
|
+
expect(universalReceiverLog?.args?.[0]?.value).toBe(
|
|
166
|
+
'0x81A904879F657142d9b5C7e875c786717e2125c0'
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
// Look for PermissionsVerified event (confirms authorization)
|
|
170
|
+
const permissionsVerifiedLog = result?.logs?.find(
|
|
171
|
+
(log: any) => log.eventName === 'PermissionsVerified'
|
|
172
|
+
)
|
|
173
|
+
expect(permissionsVerifiedLog).toBeDefined()
|
|
174
|
+
console.log(
|
|
175
|
+
'\nPermissionsVerified by:',
|
|
176
|
+
permissionsVerifiedLog?.args?.[0]?.value
|
|
177
|
+
)
|
|
178
|
+
})
|
|
179
|
+
})
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { lsp7DigitalAssetAbi as LSP7 } from '@lukso/lsp7-contracts/abi'
|
|
2
|
+
import { decodeFunctionData } from 'viem'
|
|
3
|
+
import { lukso } from 'viem/chains'
|
|
4
|
+
import { describe, expect, it } from 'vitest'
|
|
5
|
+
import { JSONbigString } from '../browser'
|
|
6
|
+
import { defaultSchemaPlugins } from './plugins'
|
|
7
|
+
import { pluginRegistry } from './registry'
|
|
8
|
+
import { decodeTransaction as decodeTransactionCore } from './transaction'
|
|
9
|
+
import type { DecoderResult } from './types'
|
|
10
|
+
import { customDecodeFunctionData } from './utils'
|
|
11
|
+
|
|
12
|
+
describe('LSP7 TransferBatch Decoding', () => {
|
|
13
|
+
it('should decode transferBatch transaction 0xc97646850ebd1f6a778847c25cb15589187bd29cd6f6ad06b349714a1a45408a', async () => {
|
|
14
|
+
// This transaction was failing to decode properly - showing as "raw" instead of "transferBatch"
|
|
15
|
+
const transaction = {
|
|
16
|
+
blockHash:
|
|
17
|
+
'0x48308c3d079608fca8dc7ce4211ec22b0d050d71973ea288cc5bc1cc692732da',
|
|
18
|
+
blockNumber: 6019259n,
|
|
19
|
+
blockTimestamp: 1759436388,
|
|
20
|
+
transactionIndex: 0,
|
|
21
|
+
transactionHash:
|
|
22
|
+
'0xc97646850ebd1f6a778847c25cb15589187bd29cd6f6ad06b349714a1a45408a',
|
|
23
|
+
status: 1,
|
|
24
|
+
gasUsed: '17180894',
|
|
25
|
+
gasPrice: 177767940n,
|
|
26
|
+
to: '0xd8744e1c6b2f9e49c54dee14f9a51e202e121228', // Universal Profile
|
|
27
|
+
from: '0xcb964fa7672db41448e2a15345a2468375c37831', // Controller/EOA
|
|
28
|
+
value: 0n,
|
|
29
|
+
input:
|
|
30
|
+
'0x44c028fe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034a025e40220b620a3987ff6c99de5975a8707b90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000058c42d7667c900000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000d4000000000000000000000000000000000000000000000000000000000000019e0000000000000000000000000000000000000000000000000000000000000268000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000000064000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e121228000000000000000000000000d8744e1c6b2f9e49c54dee14f9a51e202e1212280000000000000000000000000000000000000000000000000000000000000064000000000000000000000000d5c09c0e190ba7ae151cee8cb7c6df059bf2e06c0000000000000000000000007ad51ad81e5546280fd3bd8e6ae6ab8963035f7d000000000000000000000000299ad656cfd3758cb40bc6e2ba7777a4cda437470000000000000000000000002d6584e545b5c4a15fb3a825431b10a1452c3780000000000000000000000000ca75614b08315ec0fd49165027278ee4af12dffd000000000000000000000000980ee2187a9204f3fa990a36ecfeff220eb7efda0000000000000000000000005c42f8738fccaa6472c5be996bf136a1af34f53d000000000000000000000000e6eb90bc4e032761773ee615f7a660b267bf37d300000000000000000000000039233f855160499eece61e7f336f7abc783c7a0800000000000000000000000030dc5880adf20c43feb8a89ac32b525b0ff686340000000000000000000000000000002a62b213fcbe7c46835536f10bc69dce3c0000000000000000000000001000d177a07d91fc0a0185c52d8e0449e0b073ab000000000000000000000000af4877094c00d7dd5088d720cb0b49fa3b396dc90000000000000000000000000b88d05a5b7db7763ae596298f79c851141e21e30000000000000000000000002ec2678e6807f5809d64a89d2ca33162fa93f6570000000000000000000000000769ad497b834748207c570e595257b89f456af60000000000000000000000006e044f874ffa743b779a688b4d498db1d6d7895f0000000000000000000000000ddd3e1e9f4e1d6c50a22a276321186db39e6635000000000000000000000000528286d030bc06d80b3cf09785c7e3c400c4448b0000000000000000000000005e7f2f98427443ffccd7436a35fd7e9c9950ac9600000000000000000000000055c1bab4607611c9b2b0518b87bcbd8cc2b566e500000000000000000000000012a9eef2038c10219b8959fd9b44d0055d36383a000000000000000000000000f3b4f65e564b336e73a7904c9562dff91b3fea590000000000000000000000004510b1e0514ad7220bd44a9ef4f0e28c4d015a2d00000000000000000000000096138c4cb04b7f6e8ad8c5d66dc6d4f4f61c8834000000000000000000000000eb4158275d2ba76ff118d3b3caa1dee78e47d235000000000000000000000000e20f6767cacd89006e729202b2629d2a53c03e660000000000000000000000006124375048a24de0c5012f1233d25924e9296e26000000000000000000000000f2cc7a940043363aed657059c1efdccdaee1e456000000000000000000000000df4a1e87cc2c38790e0287de90c40ceeec1e89670000000000000000000000006e1188d0c1517efeb4245661dc418c0e4f8d72ec00000000000000000000000012d494ff38ab7a9a8501a146c9d1448c64caf9410000000000000000000000000100b4876f83d668742bebbb74787db031ea5f7b00000000000000000000000002e655f92f01bc7880807ec409f134b91bb28381000000000000000000000000167dd23ab7467aab31f0b4a8502a3f044050c64600000000000000000000000044b1fabf5aaeb1dbe9ae767493e3bd0cdc7abd390000000000000000000000003b7afeb23a394361098f637632d4d8c98bd42dac0000000000000000000000008019a277dbf91be5f3932dced1504895ee09c15500000000000000000000000075f2938a58a7862b2d1b4742abd554f716fcb24e000000000000000000000000fcfd57db73bce4f93814b61a423263da640cbbae000000000000000000000000cbf24599767c52981e3fbcc005fdd4cfa6bb8f03000000000000000000000000520517259bee51aa3588b7fe66a36a65b67585cc0000000000000000000000004f01b3221cbd0a4410a6d7d58870b5b33b47fc8f000000000000000000000000567b57a1c87e15800f6372d360310b27507fa2af0000000000000000000000003fa68abe72fc6bb8807f57ce03d288d1685dd2a2000000000000000000000000cb443efe41344b3f36e7c4609de5bd8bdd02eeec000000000000000000000000333662ba4ef5921932c922fabfdd9af9080a89f60000000000000000000000000ea62c0c58a785fd67c747561d6846e11bd420d6000000000000000000000000ed7f0c987bdbda61101b5d49c1a846204c58ebfc000000000000000000000000dd18284b38d37d624197cbb7a2962428c7371e15000000000000000000000000cc61fcc5a603f1a47c70a2aa079e042d3681e089000000000000000000000000335c8fbc47d05ffa90aaf3c114820ddee588c666000000000000000000000000b33f3d1a619b7d24f2e5406cf8709274a7f1ce0000000000000000000000000023b886e22e9137769c9bf7bba2420b32238f20810000000000000000000000004d454777dddf8541d01c54fe03cf216a7391cb62000000000000000000000000beb1ff0ff6f01ad34f8c6d2e0210e87677d909cf0000000000000000000000008eda6784f1276e6e38177d044e0b26b589503a62000000000000000000000000bffd5ee4958b3e96b7e05aa938fa9b852642e7e100000000000000000000000027b38561d28f5c00a5961f7daa603c7a13a996d4000000000000000000000000987b07f8d09f8ef221cfe03b8ae4027079782820000000000000000000000000ab42447e47da382a0eccb763388863ed5b2423f2000000000000000000000000048629a4ee8d0a9f4df98a20ef56292f9fb3bf3a000000000000000000000000929caa8068c8596d027f495d70755ab918e2d0bc0000000000000000000000003ab33f93ef2f8037740aad4e58fd32f21e060fbf00000000000000000000000037e8fed0ab73fbe9b2d023a0e45f4234119965bd0000000000000000000000009fcb78406c6132dfc230d47846094de7d9a6d555000000000000000000000000fd0e9b40871bdf61af40ccb3e6a8643374c1023a00000000000000000000000007a5ab61f1922a267d572e7f101f254a9a24d4840000000000000000000000008ead4924383e3d45ff9055cb2d0c6578b605731d000000000000000000000000f63a271f0e2e6a904f6245a2827e507786c29397000000000000000000000000a141a14d546c16467b721372d59f683ddc3450230000000000000000000000000ac1b3d8f6283c1bfea145639bd40f8e0b788c8e000000000000000000000000000491fb71126921aa041c846fd78df38d50f7b200000000000000000000000082025d6fec384394b19f792c773a569c64d072bd0000000000000000000000000ba2de8126cdca92057ac3d8f1705ba4856374aa000000000000000000000000dad83629c6799dc39afcc856bab33cb3482897ff000000000000000000000000694b31a5c8665a977a7213491705c434fd33871100000000000000000000000065a52968beda055905a086b1ad8ac071b196e6b00000000000000000000000004c03c91327278cca66b49442af782ed69fafb81b000000000000000000000000e0ff7a5fac6820552d7d2d8743c33013bddfb65200000000000000000000000042f238f99da6901374d237a8b1ada1b166ebcffd00000000000000000000000046731b263b896a7feb691740cb1b6f5f2a91eabd000000000000000000000000041478c388b9d2e1e89dffc1bc46d7b7cd4c978b00000000000000000000000000067602af865973ace9f5e18a3611d604d9c58b000000000000000000000000c0578ce8447790d53a206e40372531655ff8c8960000000000000000000000002af143ebf594e932c124cd6082894ecb6972aac5000000000000000000000000b91b32c711c172588b0e42f44933ec5a271c200400000000000000000000000091df65204a37c3d35fe015b306a8db4bef4278b00000000000000000000000009a50b91391a912ea9ca6b6e310de2825af2e7a48000000000000000000000000e1349b5a1a3cd402dfcaf170413402eb125bd6d7000000000000000000000000f370fe47a2ffa00a54a70162189af522ebaa7c27000000000000000000000000ab6d4875bf4d84ae69d61e8cb8c01d6ba8b7bda10000000000000000000000009d15517360639eba0a5676088e6074a8bce980200000000000000000000000009ceeb0a07cb53a9e2eb5bf73975f10fe55f48d46000000000000000000000000a698e43f20e6e7636ca88c91977fb18a5b15343e0000000000000000000000005917880bc9bede2b8e1bae9a9ccc14d3c6caf382000000000000000000000000f03d8ca0c8ec6c25111330a0f07cf12936d099650000000000000000000000001001c995e39e66908f284c7e7ec45ed3ed863afc0000000000000000000000001f4d99e770906f2d807257bbf59e73401b44d715000000000000000000000000e6c48d3f3ba1e7a7e647866ad5b52b55ddd215fe000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000cc00000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d400000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000dc00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e400000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000ec00000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f400000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000fc000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001040000000000000000000000000000000000000000000000000000000000000108000000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000001140000000000000000000000000000000000000000000000000000000000000118000000000000000000000000000000000000000000000000000000000000011c000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000128000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000001340000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000013c000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001440000000000000000000000000000000000000000000000000000000000000148000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000001540000000000000000000000000000000000000000000000000000000000000158000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001640000000000000000000000000000000000000000000000000000000000000168000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000001740000000000000000000000000000000000000000000000000000000000000178000000000000000000000000000000000000000000000000000000000000017c000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001840000000000000000000000000000000000000000000000000000000000000188000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001940000000000000000000000000000000000000000000000000000000000000198000000000000000000000000000000000000000000000000000000000000019c00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b800000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f800000000000000000000000000000000000000000000000000000000000001fc000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002040000000000000000000000000000000000000000000000000000000000000208000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000000000002140000000000000000000000000000000000000000000000000000000000000218000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002240000000000000000000000000000000000000000000000000000000000000228000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000002340000000000000000000000000000000000000000000000000000000000000238000000000000000000000000000000000000000000000000000000000000023c000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002440000000000000000000000000000000000000000000000000000000000000248000000000000000000000000000000000000000000000000000000000000024c00000000000000000000000000000000000000000000000000000000000002500000000000000000000000000000000000000000000000000000000000000254000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000000000175365637265746c7920736865206c6f766573207468656d00000000000000000000000000000000000000000000000000000000000000000000000000',
|
|
31
|
+
logs: [
|
|
32
|
+
{
|
|
33
|
+
topics: [
|
|
34
|
+
'0xc0a62328f6bf5e3172bb1fcb2019f54b2c523b6a48e3513a2298fbf0150b781e',
|
|
35
|
+
'0x000000000000000000000000a5467dfe7019bf2c7c5f7a707711b9d4cad118c8',
|
|
36
|
+
'0x0000000000000000000000000000000000000000000000000000000000000000',
|
|
37
|
+
'0x9790242100000000000000000000000000000000000000000000000000000000',
|
|
38
|
+
],
|
|
39
|
+
data: '0x',
|
|
40
|
+
address: '0x497fdac9e42193f6f79651d2d1caf6ba5789e055',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const allPlugins = await pluginRegistry.getAll()
|
|
46
|
+
const wrappers: DecoderResult[] = []
|
|
47
|
+
const result = await decodeTransactionCore(
|
|
48
|
+
transaction as unknown as DecoderResult,
|
|
49
|
+
{
|
|
50
|
+
async: true,
|
|
51
|
+
preferError: false,
|
|
52
|
+
chain: lukso,
|
|
53
|
+
plugins: allPlugins,
|
|
54
|
+
schemaPlugins: defaultSchemaPlugins,
|
|
55
|
+
wrappers,
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
// Log the result to understand what we're getting
|
|
60
|
+
console.log(
|
|
61
|
+
'\nDecoding result:',
|
|
62
|
+
JSONbigString.stringify(
|
|
63
|
+
{
|
|
64
|
+
standard: result?.standard,
|
|
65
|
+
resultType: result?.resultType,
|
|
66
|
+
sig: result?.sig,
|
|
67
|
+
functionName: result?.functionName,
|
|
68
|
+
to: result?.to,
|
|
69
|
+
from: result?.from,
|
|
70
|
+
wrappers,
|
|
71
|
+
},
|
|
72
|
+
null,
|
|
73
|
+
2
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
// Log wrappers if they exist
|
|
78
|
+
if ((result as any)?.wrappers?.length > 0) {
|
|
79
|
+
console.log(
|
|
80
|
+
'\nWrappers:',
|
|
81
|
+
JSONbigString.stringify((result as any).wrappers, null, 2)
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Log children if they exist
|
|
86
|
+
if ((result as any)?.children?.length > 0) {
|
|
87
|
+
console.log(
|
|
88
|
+
'\nChildren:',
|
|
89
|
+
JSONbigString.stringify((result as any).children, null, 2)
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Should decode as transferBatch, not raw
|
|
94
|
+
expect(result).toBeDefined()
|
|
95
|
+
expect(result?.standard).not.toBe('unknown')
|
|
96
|
+
expect(result?.resultType).not.toBe('raw')
|
|
97
|
+
|
|
98
|
+
// Signature 0x2d7667c9 is transferBatch
|
|
99
|
+
expect(result?.sig).toBe('0x2d7667c9')
|
|
100
|
+
|
|
101
|
+
// Should be properly identified as LSP7
|
|
102
|
+
// expect(result.standard).toBe('LSP7')
|
|
103
|
+
// expect(result.resultType).toBe('transferBatch')
|
|
104
|
+
})
|
|
105
|
+
})
|