aeternity / aepp-calldata-js

Aeternity data serialization library
ISC License
3 stars 4 forks source link

`bytecodeContractCallEncoder` failed to decodeCall #220

Closed CedrikNikita closed 1 year ago

CedrikNikita commented 1 year ago
import { BytecodeContractCallEncoder } from '@aeternity/aepp-calldata';
...
const { bytecode } = await fetchJson('https://testnet.aeternity.io/v3/contracts/ct_MLXQEP12MBn99HL6WDaiTqDbG4bJQ3Q9Bzr57oLfvEkghvpFb/code');
const bytecodeContractCallEncoder = new BytecodeContractCallEncoder(bytecode);
bytecodeContractCallEncoder.decodeCall(callData);
// callData: cb_KxGgrHPPa2+IDeC2s6dj/8BviDpZvO5MEQ1II58CoA+jduXx2lWO56qpkcyYegDPEXsvjZYgC3Z4A6FQn/dBnwKgTXIk+QipjYUkNnGNIj1ZprZMgRF6awlXqrSIIMLSXZifAKCZQMy2a+t5j2iXIdLDYmGd8j1HDxShNfxsbKzKti0jgW+GAYmRujgZr4IAAQA/J8U0MA==

results in

FatePrefixError: Invalid FATE prefix: 0b00110111
    at TypeFactory.createType (TypeFactory.js:82:1)
    at Serializer.deserializeStream (Serializer.js:107:1)
    at BytecodeSerializer.deserializeArgument (BytecodeSerializer.js:162:1)
    at eval (BytecodeSerializer.js:148:1)
    at Array.forEach (<anonymous>)
    at BytecodeSerializer.deserializeArguments (BytecodeSerializer.js:147:1)
    at BytecodeSerializer.deserializeInstruction (BytecodeSerializer.js:132:1)
    at BytecodeSerializer.deserializeInstructions (BytecodeSerializer.js:106:1)
    at BytecodeSerializer.deserializeFunction (BytecodeSerializer.js:78:1)
    at BytecodeSerializer.deserializeFunctions (BytecodeSerializer.js:60:1)

request to https://latest.compiler.aepps.com/decode-calldata/bytecode is able to decode this callData:

{
    "arguments": [
        {
            "type": "int",
            "value": 1000000000000000000
        },
        {
            "type": "int",
            "value": 4204599458791493000
        },
        {
            "type": "list",
            "value": [
                {
                    "type": "contract",
                    "value": "ct_7tTzPfvv3Vx8pCEcuk1kmgtn4sFsYCQDzLi1LvFs8T5PJqgsC"
                },
                {
                    "type": "contract",
                    "value": "ct_b7FZHQzBcAW4r43ECWpV3qQJMQJp5BxkZUGNKrqqLyjVRN3SC"
                }
            ]
        },
        {
            "type": "address",
            "value": "ak_2AVeRypSdS4ZosdKWW1C4avWU4eeC2Yq7oP7guBGy8jkxdYVUy"
        },
        {
            "type": "int",
            "value": 1690368029218
        },
        {
            "type": "variant",
            "value": [
                0
            ]
        }
    ],
    "function": "swap_exact_tokens_for_tokens"
}

The initial tx is generated by dex

tx_+PErAaEBmUDMtmvreY9olyHSw2JhnfI9Rw8UoTX8bGysyrYtI4GCBQOhBS4tQiqrF7qZpynMrwMgiI6sSB2r5xmos4caDS9DGTmbA4aoIRKiGAAAAIMCSfCEO5rKALiTKxGgrHPPa2+IDeC2s6dj/8BviDpZvO5MEQ1II58CoA+jduXx2lWO56qpkcyYegDPEXsvjZYgC3Z4A6FQn/dBnwKgTXIk+QipjYUkNnGNIj1ZprZMgRF6awlXqrSIIMLSXZifAKCZQMy2a+t5j2iXIdLDYmGd8j1HDxShNfxsbKzKti0jgW+GAYmRyTHir4IAAQA/WjRqBQ==

The contract is the main router of the dex operations. https://github.com/aeternity/dex-contracts-v2/blob/master/contracts/router/AedexV2Router.aes