Getting "Cannot deserialize the contract state" when calling Rust init function
I've been able to run near dev-deploy
using near-shell for a Rust contract, and then call a function "new" with near call my-account new '{"param1": "foo"}'
However, this does not work when I deploy the same contract to my preferred account created with NEAR Wallet.
The error is:
Smart contract panicked: panicked at 'Cannot deserialize the contract state.: Custom { kind: InvalidInput, error: "Unexpected length of input" }',
Solution 1:
Turns out there is a common problem in the blockchain world when updating a contract at the same account/address.
The solution here was to delete and remake the account.
I used near-shell
to delete it, then Wallet to recreate it.
On the command line:
near delete my-account another-account-getting-the-tokens
Then created the account again by visiting: https://wallet.nearprotocol.com/create/
This cleared the state and I was able to redeploy the contract and run the init
function "new"
Solution 2:
I stumbled accross the same error in 2021:
Cannot deserialize the contract state
after making changes to the contract, which has lead me to this stackoverflow question.
I was publishing the contract on testnet by running yarn dev
which calls near dev-deploy
.
The solution for me was to generate a new dev-user which can be achieved with passing -f
as an argument:
near dev-deploy -f path/to/contract.wasm
You can find this by running dev-deploy --help:
-f, --init, --force Create new account for deploy (even if there is one already available). default: false
Hope this helps some.