kevinheavey / solders

A high-performance Python toolkit for Solana, written in Rust
https://kevinheavey.github.io/solders/
Apache License 2.0
205 stars 23 forks source link

OverflowError: int too big to convert on Account type due to rent_epoch being too large on mainnet #100

Closed OlegJakushkin closed 2 months ago

OlegJakushkin commented 2 months ago

Issue: in real life, on mainnet we have stuff like rent_epoch=18446744073709552000

Minimal test:

#pip install -U solders solana based58 
from based58 import b58decode
from solders.account import Account
from solders.pubkey import Pubkey
from solders.rpc.responses import (
    GetAccountInfoResp,
    RpcResponseContext,

)

value = Account(
    data=b58decode(
        b"11116bv5nS2h3y12kD1yUKeMZvGcKLSjQgX6BeV7u1FrjeJcKfsHRTPuR3oZ1EioKtYGiYxpxMG5vpbZLsbcBYBEmZZcMKaSoGx9JZeAuWf"
    ),
    executable=False,
    lamports=29176320,
owner=Pubkey.from_string("6LtLpnUFNByNXLyCoK9wA2MykKAmQNZKBdY8s47dehDc"),
    rent_epoch=18446744073709552000, # here lies the issue
)
context = RpcResponseContext(slot=1)
bla= GetAccountInfoResp(context=context, value=value)

results in OverflowError: int too big to convert

Extra info:

kevinheavey commented 2 months ago

What address has rent epoch 18446744073709552000? That is indeed too big for a u64 but in the Agave code that field is u64.

Can you paste the raw JSON that it's failing to parse? Here's a curl snippet to fetch it easily:

curl https://api.mainnet-beta.solana.com -X POST -H "Content-Type: application/json" -d '
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getAccountInfo",
    "params": [
      "GKk7CnL63zGvNyij7pRc8SFm1CesSUqDenV1x9vPUVJq",
      {
        "encoding": "base58"
      }
    ]
  }
'
OlegJakushkin commented 2 months ago

@kevinheavey the 6LtLpnUFNByNXLyCoK9wA2MykKAmQNZKBdY8s47dehDc one

your query:

{'jsonrpc': '2.0', 'result': {'context': {'apiVersion': '1.18.15', 'slot': 275626974}, 'value': {'data': ['1111Dk7tnoddMvATwtoKYbhf9c51kPxy4Siv5Ubb93zssnpLHMuMjsuabW1YMgGHkUTqyz25DNeCLDF64m5Cj7neKSKG9mhiNB6upWWSReyVQB', 'base58'], 'executable': False, 'lamports': 1461600, 'owner': 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', 'rentEpoch': 18446744073709551615, 'space': 82}}, 'id': 1}

same for my account:

{'jsonrpc': '2.0', 'result': {'context': {'apiVersion': '1.18.15', 'slot': 275627111}, 'value': {'data': ['t64jUjDSHE6LVtZ9pQbE1ZdN1SmX5YxSp8QH7oKVjRrNNxqm', 'base58'], 'executable': True, 'lamports': 1141440, 'owner': 'BPFLoaderUpgradeab1e11111111111111111111111', 'rentEpoch': 18446744073709551615, 'space': 36}}, 'id': 1}

so its overflow all over=)

kevinheavey commented 2 months ago

That has rentEpoch 18446744073709551615 which is u64::MAX and works fine if I plug it into a solders Account

OlegJakushkin commented 2 months ago

At least for us it was overflowing at 2024-06-26 15:02:58.84

kevinheavey commented 2 months ago

Weird, anyway closing this because the RPC 100% should not do that. Not a Solders issue

OlegJakushkin commented 2 months ago

@kevinheavey And yet it did:

'{"jsonrpc":"2.0","id":0,"result":{"context":{"apiVersion":"1.17.25","slot":275116418},"value":{"data":["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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=","base64"],"executable":false,"lamports":29176320,"owner":"6LtLpnUFNByNXLyCoK9wA2MykKAmQNZKBdY8s47dehDc","rentEpoch":18446744073709552000,"space":4064}}}'
kevinheavey commented 2 months ago

I'm saying to contact the RPC provider, they need to find out why they produced an invalid response. Solders can't fix the RPC server