public SolidityExecutor Execute(IEnumerable <byte> scAddrPayload, IEnumerable <byte> addrPayload, IEnumerable <byte> data, bool addInTransaction = false)
        {
            if (scAddrPayload == null)
            {
                throw new ArgumentNullException(nameof(scAddrPayload));
            }

            if (addrPayload == null)
            {
                addrPayload = new byte[0];
            }

            var smartContract    = _smartContractStore.GetSmartContracts().GetSmartContract(scAddrPayload);
            var defaultCallValue = new DataWord(new byte[] { 0x00 });

            _smartContracts = _smartContractStore.GetSmartContracts();
            var scode = smartContract.Code.ToHexString();

            _solidityProgram = new SolidityProgram(smartContract.Code.ToList(), new SolidityProgramInvoke(data, smartContract.Address, new DataWord(addrPayload.ToArray()), defaultCallValue, _smartContracts, addInTransaction));
            var vm = new SolidityVm();

            while (!_solidityProgram.IsStopped())
            {
                vm.Step(_solidityProgram);
            }

            return(this);
        }
Beispiel #2
0
 public SolidityProgramInvoke(IEnumerable <byte> smartContractAddress, DataWord ownerAddress, DataWord callValue, SmartContracts smartContracts)
 {
     _smartContractAddress = smartContractAddress;
     _ownerAddress         = ownerAddress;
     _callValue            = callValue;
     _smartContracts       = smartContracts;
 }
Beispiel #3
0
 public SolidityProgramInvoke(IEnumerable <byte> msgDataRaw, IEnumerable <byte> smartContractAddress, DataWord ownerAddress, DataWord callValue, SmartContracts smartContracts, bool addInTransaction = false)
 {
     _msgDataRaw           = msgDataRaw;
     _smartContractAddress = smartContractAddress;
     _ownerAddress         = ownerAddress;
     _callValue            = callValue;
     _smartContracts       = smartContracts;
     _addInTransaction     = addInTransaction;
 }