In the upcoming v2 release of the Cartesi Rollups SDK, inputs and outputs will be encoded as Solidity function calldata.
This package aims to show front-end developers how inputs and outputs can be encoded or decoded using viem
and the contract ABIs exported by @cartesi/rollups
.
It also comes with a handy-dandy CLI tool for encoding and decoding of inputs and outputs.
You can install the package with pnpm
by running:
pnpm add -g @guidanoli/cmioc
cmioc encode input \
--chain-id 1 \
--app-contract 0x70ac08179605AF2D9e75782b8DEcDD3c22aA4D0C \
--msg-sender 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 \
--block-number 42 \
--block-timestamp 70000 \
--prev-randao 40823578488146031703637781058841789769586951870728503003341100870835983872788 \
--index 10 \
--payload 0xdeadbeef
Output:
0x415bf363000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070ac08179605af2d9e75782b8decdd3c22aa4d0c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000111705a41539c3688747a1a8c7811b98b0427331ff73aab018eb5c9921993d617f314000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000004deadbeef00000000000000000000000000000000000000000000000000000000
Just add the --binary
flag.
cmioc decode input 0x415bf363000000000000000000000000000000000000000000000000000000000000000100000000000000000000000070ac08179605af2d9e75782b8decdd3c22aa4d0c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000111705a41539c3688747a1a8c7811b98b0427331ff73aab018eb5c9921993d617f314000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000004deadbeef00000000000000000000000000000000000000000000000000000000
or
cat input.txt | pnpm cmioc decode input
cat input.bin | pnpm cmioc decode input --binary
Output:
{
"chainId": "1",
"appContract": "0x70ac08179605AF2D9e75782b8DEcDD3c22aA4D0C",
"msgSender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"blockNumber": "42",
"blockTimestamp": "70000",
"prevRandao": "40823578488146031703637781058841789769586951870728503003341100870835983872788",
"index": "10",
"payload": "0xdeadbeef"
}
cmioc encode notice \
--payload 0xdeadbeef
Output:
0xc258d6e500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004deadbeef00000000000000000000000000000000000000000000000000000000
Just add the --binary
flag.
cmioc encode voucher \
--destination 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 \
--value 1000000000000000000 \
--payload 0xfafafa
Output:
0x237a816f000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003fafafa0000000000000000000000000000000000000000000000000000000000
Just add the --binary
flag.
cmioc encode delegatecallvoucher \
--destination 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 \
--payload 0xfafafa
Output:
0x10321e8b000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003fafafa0000000000000000000000000000000000000000000000000000000000
Just add the --binary
flag.
cmioc decode output 0xc258d6e500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004deadbeef00000000000000000000000000000000000000000000000000000000
or
cat notice.txt | pnpm cmioc decode output
cat notice.bin | pnpm cmioc decode output --binary
Output:
{
"type": "notice",
"payload": "0xdeadbeef"
}
cmioc decode output 0x237a816f000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003fafafa0000000000000000000000000000000000000000000000000000000000
or
cat voucher.txt | pnpm cmioc decode output
cat voucher.bin | pnpm cmioc decode output --binary
Output:
{
"type": "voucher",
"destination": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"value": "1000000000000000000",
"payload": "0xfafafa"
}
cmioc decode output 0x10321e8b000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003fafafa0000000000000000000000000000000000000000000000000000000000
or
cat delegatecallvoucher.txt | pnpm cmioc decode output
cat delegatecallvoucher.bin | pnpm cmioc decode output --binary
Output:
{
"type": "delegatecallvoucher",
"destination": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"payload": "0xfafafa"
}