Продолжаем узнавать разнообразие cast команд и сегодня поговорим о тех, что помогают работать с аккаунтами, кошельками и транзакциями, и, на закуску, узнаем, как получить source код контракта с Etherscan.
Account команды
На данный момент существуют 6 команд cast для работы с аккаунтами:
1. cast balance - позволяет узнать количество нативных токенов сети на аккаунте в wei. Тут, кстати, можно уточнить номер блока, на момент которого был тот или иной баланс. Полная команда выглядит так:
cast balance account --block blockNum --rpc-url RpcUrl2. cast storage - крутая команда, чтобы получить значения в storage контракта. Можно уточнить слот, в котором лежит значение, и скастовать информацию только из него. Например для WETH контракта:
cast storage 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 0или просто
cast storage 0x5Af0D9827E0c53E4799BB226655A1de152A425a53. cast proof - получение storage proof аккаунта. Не очень понял, что каких целей это может потребоваться. С этой командой вы получить proof таких полей как: accountProof, account address, account balance, codeHash, nonce, storageHash, storageProof, storageProof.key, storageProof.proof, storageProof.value.
Если при написании тестов нам будут требоваться эти команды, мы обязательно вернемся к ним и разберем подробнее.
4. cast nonce - тут все просто, получаем nonce аккаeнта, команда предельно простая:
cast nonce account5. cast code - получение байткода контракта. Пример с Weth:
cast code 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc26. cast codesize - получение runtime bytecode size контракта.
P.S. В большинстве команд, где запросы идут в сеть, нужно добавлять свою rpc-url!
Теперь несколько слов о командах для работы с кошельком.
Wallet команды
1. cast wallet new - создать новый кошелек: адрес и приватный ключ.
2. cast wallet address - конвертация приватного ключа в адрес кошелька. Интересная команда, которая принимает достаточно большое количество опций для генерации адреса: на основе приватного ключа, mnemonic derivation path, mnemonic passphrase, обычного mnemonic. При этом вы также можете указывать, где хранится ключ, который нужно использовать для генерации адреса.
Самая простая команда звучит так:
cast wallet address --private-key PRIVATE_KEYвесь список опция можно найти тут:
https://book.getfoundry.sh/reference/cast/cast-wallet-address
3. cast wallet sign - с ней вы можете подписать сообщение с вашего кошелька. Также, помимо приватных ключей, можно использовать mnemonic опции. Простая команда выглядит так:
cast wallet sign --private-key PRIV_KEY "hello"4. cast wallet verify - раз можно подписать сообщение, то есть возможность и проверки этого действия. С этой командой можно проверить адресата подписанного сообщения. Команда:
cast wallet verify --address account --address addressMessageSignature5. cast wallet vanity - интересная команда, которая позволяет сгенерировать адрес по специальным критериям: с определенным окончанием или началом, или nonce. Выглядит так:
cast wallet vanity --ends-with beefгде beef - это то, на что должен заканчиваться требуемый адрес.
Далее несколько команд для работы с транзакциями.
Transaction команды
Для начала пройдемся по командам, которые позволяют получать информацию о проведенных транзакциях:
1. cast receipt - получения "чека" о транзакции. Потребуется указать хэш транзакции:
cast receipt TX_HASH2. cast tx - похожая на первую и выдает информацию о транзакции.
cast tx TX_HASH3. cast-estimate - с ней можно оценить стоимость проведения транзакции по газу. Также можно указать, если с ней потребуется переслать нативную валюту, типа Эфира. Команда немного сложнее предыдущих и выглядит так:
cast estimate 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 --value 0.1ether "deposit()" --rpc-url rpcUrl0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 - адрес контракта, куда пойдет вызов, value - количество отправляемого с транзакцией Эфира, deposit - функция, которую будем вызывать.
Вместо deposit - вы можете вставить calldata с селектором вызываемой функции и аргументами для нее.