Тестировал Nethereum и пытался запустить базовый тестовый класс в соответствии с документацией Nethereum, но возникли проблемы при запуске команды майнинга.
Проблема
Miner.Start всегда возвращал «false» с самого начала. Затем я наткнулся на этот вопрос Nethereum 2.0.0-rc5 Miner , в котором упоминается, что я должен попробовать использовать предварительную версию, где Web3Geth — это новый способ вызова майнинга, пробуя оба способа, я все еще не могу получить истинное значение тогда продолжить мой тест.
var mineResult = await web3Geth.Miner.Start.SendRequestAsync(6);
//var mineResult = await web3.Miner.Start.SendRequestAsync(6);
Это мой тестовый класс XUnit, в котором возникает проблема.
using System.Threading;
using System.Threading.Tasks;
using Nethereum.Geth;
using Nethereum.Hex.HexTypes;
using Nethereum.Web3;
using Xunit;
namespace BasicTurorial
{
public class TestClass
{
[Fact]
public async Task ShouldBeAbleToDeployAContract()
{
var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
var password = "password";
var abi = @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""payable"":false,""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""payable"":false,""type"":""constructor""}]";
var byteCode =
"0x60606040523415600b57fe5b6040516020806100ac83398101604052515b60008190555b505b6079806100336000396000f300606060405263ffffffff60e060020a6000350416631df4f14481146020575bfe5b3415602757fe5b60306004356042565b60408051918252519081900360200190f35b60005481025b9190505600a165627a7a72305820ec2cf1c300fa92e0ccd1f5ce518cc43c9578fe9007797024f1424d07f491020a0029";
var multiplier = 7;
var web3 = new Web3();
var web3Geth = new Web3Geth();
var unlockAccountResult =
await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, 120);
Assert.True(unlockAccountResult);
var transactionHash =
await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, multiplier);
var mineResult = await web3Geth.Miner.Start.SendRequestAsync(6);
//var mineResult = await web3.Miner.Start.SendRequestAsync(6);
Assert.True(mineResult);
var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
while (receipt == null)
{
Thread.Sleep(5000);
receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
}
var contractAddress = receipt.ContractAddress;
var contract = web3.Eth.GetContract(abi, contractAddress);
var multiplyFunction = contract.GetFunction("multiply");
var result = await multiplyFunction.CallAsync<int>(7);
Assert.Equal(49, result);
}
}
}
Полный исходный код можно найти здесь https://github.com/stradled/NethereumTest.
Я случайно наткнулся на ту же проблему, и после нескольких недель проб и ошибок это сработало для меня:
var web3 = new Nethereum.Geth.Web3Geth("http://127.0.0.1:8454");
var mine = await web3.Miner.Start.SendRequestAsync(6);
NB:// пожалуйста, используйте локальный адрес и порт, которые относятся к вам, в данном случае мой 127.0.0.1:8454
Ричард Фу
оседлал