aeternity / aepp-calldata-js

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

`FatePrefixError` when trying to decode `callData` for Tokaen.org transactions #277

Closed martinkaintas closed 1 month ago

martinkaintas commented 3 months ago

When trying to decode callData for Tokaen.org transaction I'm getting a FatePrefixError: Invalid FATE prefix: 0b10001111 error.

The error happens at this line in the Superhero Wallet when trying to execute buy here

Screenshot 2024-06-20 144602

dincho commented 3 months ago

@davidyuk can you help here getting more lib specific reproduction steps?

davidyuk commented 3 months ago

Sure!

import { BytecodeContractCallEncoder } from './src/main.js';

const response = await fetch(`https://testnet.aeternity.io/v3/contracts/ct_7NTLakadL7cQ4X3EcXYmec5p3QYgAEA6DDqYBMwH5ZZ2U2k5L/code`);
const { bytecode } = await response.json();

const bytecodeContractCallEncoder = new BytecodeContractCallEncoder(bytecode);
const value = bytecodeContractCallEncoder.decodeCall('cb_KxEV1igBG2+IDeC2s6dj/8DKjvSn'); // copied from SW confirmation window
console.log(value);

0b10001111 introduced in https://github.com/aeternity/aebytecode/pull/94

davidyuk commented 2 months ago

More concrete reproduction

import { BytecodeContractCallEncoder } from './src/main.js';

const bytecodeContractCallEncoder = new BytecodeContractCallEncoder(
    'cb_+NBGA6D+x/gUE1YYLmvMJDIzJK2ZFJyOM5sXubwJy+9TVt/ib8C4n7iE/kTWRB8ANwA3ABoOgj8BAz/+m66dXgA3AQdHAgwBAAwDAAwDNwEHDAOPbxX4U0YDoJg7mklGIIWH49uiZBksC7yUEVO88y4D7lTd8+T4TMK2wKOS/kTWRB8ANwEHNwAaBoIAAQM/jC8BEUTWRB8RaW5pdIIvAIk4LjAuMC1yYzEAowAAlS8CEUTWRB8RaW5pdBGbrp1eDW5ld4IvAIk4LjAuMC1yYzEAaSb5ng==',
);

console.log(bytecodeContractCallEncoder._internalEncoder._typeResolver._bytecode)
contract IntHolder =
  type state = int
  entrypoint init(x) = x

main contract IntHolderFactory =
  stateful entrypoint new(x : int) : IntHolder =
    Chain.create(x)
dincho commented 2 months ago

Thanks @davidyuk

davidyuk commented 2 months ago

I will draft a PR today/tomorrow