У меня есть функция по умному контракту, которую я пытаюсь вызвать через C # / Nethereum.Этот код запускается, когда я запускаю модульный тест в js.Я также протестировал его в Remix IDE, и он работает.
Когда я вызываю этот код в Nethereum, я получаю сообщение об ошибке виртуальной машины, и транзакция отменяется.
Ошибка, которую я получаю:
[15.05.2009 14:27:14] System.Private.CoreLib: Исключительная ситуация при выполнении функции: DeployContractManager.Nethereum.JsonRpc.Client: Исключение виртуальной машины при обработке транзакции: возврат.
Кто-нибудь сталкивался с этим раньше или есть какое-либо понимание того, что мне следует попытаться определить проблему?
ВотКонтракт о надежности:
pragma solidity >=0.4.21 <0.6.0;
import "./ContractManager.sol";
contract ContractManagerFactory {
mapping(bytes32 => address) addresses;
function createManager(address supplier, address customer) public returns(address) {
bytes32 key = keccak256(abi.encodePacked(supplier, customer));
ContractManager cm = new ContractManager(supplier, customer);
addresses[key] = address(cm);
return addresses[key];
}
function getAddress(address supplier, address customer) public view returns(address) {
bytes32 key = keccak256(abi.encodePacked(supplier, customer));
return addresses[key];
}
}
Вот тест JS (работает):
it("can create contract manager and get its address", async() => {
await factory.createManager(supplier, customer, {from:supplier});
const addr = await factory.getAddress(supplier, customer, {from:supplier});
console.log(addr);
});
Вот код C # (который не работает):
public class ContractManagerFactoryProxy
{
private readonly Web3 _web3;
private readonly string _address;
//I have had issues getting this to work, so I have been manually
//deploying
public ContractManagerFactoryProxy(string providerUrl)
{
//this should be a fixed address
_web3 = new Web3(providerUrl);
_address = "0xD47a082BcF57E696F425d86fE17430Bc05666a69";
}
public async Task<string> CreateManager(string saddr, string caddr, string from)
{
var msg = _web3.Eth.GetContractTransactionHandler<CreateManagerMessage>();
var tx = await msg.SendRequestAsync(
_address,
new CreateManagerMessage
{
FromAddress = from,
Supplier = saddr,
Customer = caddr
});
return tx;
}
}
[Function("createManager", "address")]
public class CreateManagerMessage : FunctionMessage
{
[Parameter("address", "supplier")] public string Supplier { get; set; }
[Parameter("address", "customer")] public string Customer { get; set; }
}