Как я могу выполнить код локально по заданному адресу?

Каков самый простой способ выполнить фрагмент кода по определенному адресу основного блокчейна локально с использованием интерфейса командной строки?

Здесь показано, как воспроизвести mp3-файл на основе входных данных с помощью командыgeth , но как вы можете выполнить реальный код с его логикой на вашей локальной машине для собственных целей тестирования?

Можете ли вы уточнить / попытаться уточнить, что вы имеете в виду. Мне трудно понять, что именно вы хотите, чтобы произошло.
Я просто хочу имитировать выполнение байт-кода по конкретному адресу блокчейна. Я думаю, что текущий ответ охватывает это.
Что вы подразумеваете под симуляцией? Вы хотите использовать живой основной блокчейн или тестовый, который может предоставить testrpc? Тогда пример MP3 — это просто данные, хранящиеся в транзакции. Вы имеете в виду чтение двоичных данных, хранящихся в транзакции, а затем непосредственное использование их из стандартного вывода и запуск в какой-либо другой локальной программе (здесь mpg321 для воспроизведения двоичных данных mp3). Какие данные вы планируете хранить? Помните о стоимости хранения данных в цепочке. Вам лучше использовать какую-нибудь ФС распространителя, например IPFS, и создать ссылку на контент в данных транзакции.
Я имею в виду, что я хотел бы имитировать выполнение уже существующего кода в блокчейне на моей локальной машине из CLI. Не чтение данных, таких как аудио, а выполнение байт-кода и получение результата этого выполнения только для целей тестирования. Я не планирую ничего хранить в основной цепочке блоков, возможно, я захочу хранить данные в каком-то временном месте, чтобы выполнить код.

Ответы (1)

Метод JSON_RPC eth_call позволяет имитировать транзакцию в блокчейне, включая выполнение контракта.

Доступ к этому методу можно получить в geth или web3.js как

eth.call({from: eth.accounts[0], to: myContract, gas: 1000000, value: web3.toWei(1,"ether")})

Если вы знаете ABI для контракта, вы можете использовать

var myContract = eth.contract(myABI).at(contractAddress);
var result = myContract.myMethod.call(arg1,arg2,arg3,{from:myAddress, gas:1000000})

Если вы хотите получить отладочную трассировку транзакции, вы можете отправить транзакцию, а затем использовать debug_traceTransaction .