/// <summary> /// Sets up a new <see cref="ISmartContractState"/> based on the current state. /// </summary> public ISmartContractState CreateSmartContractState(IState state, GasMeter gasMeter, uint160 address, BaseMessage message, IStateRepository repository) { return(this.smartContractStateFactory.Create(state, gasMeter, address, message, repository)); }
/// <summary> /// Sets up a new <see cref="ISmartContractState"/> based on the current state. /// </summary> private ISmartContractState CreateSmartContractState(IGasMeter gasMeter, uint160 address, BaseMessage message, IContractState repository) { IPersistenceStrategy persistenceStrategy = new MeteredPersistenceStrategy(repository, gasMeter, new BasicKeyEncodingStrategy()); var persistentState = new PersistentState(persistenceStrategy, new ContractPrimitiveSerializer(this.Network), address); var contractState = new SmartContractState( this.Block, new Message( address.ToAddress(this.Network), message.From.ToAddress(this.Network), message.Amount ), persistentState, this.Serializer, gasMeter, this.LogHolder, this.InternalTransactionExecutorFactory.Create(this), new InternalHashHelper(), () => this.BalanceState.GetBalance(address)); return(contractState); }
private StateTransitionResult ApplyCreate(IState state, object[] parameters, byte[] code, BaseMessage message, uint160 address, string type = null) { var gasMeter = new GasMeter(message.GasLimit); gasMeter.Spend((Gas)GasPriceList.BaseCost); state.ContractState.CreateAccount(address); ISmartContractState smartContractState = state.CreateSmartContractState(state, gasMeter, address, message, state.ContractState); VmExecutionResult result = this.Vm.Create(state.ContractState, smartContractState, code, parameters, type); bool revert = !result.IsSuccess; if (revert) { return(StateTransitionResult.Fail( gasMeter.GasConsumed, result.Error)); } return(StateTransitionResult.Ok( gasMeter.GasConsumed, address, result.Success.Result )); }
/// <summary> /// Sets up a new <see cref="ISmartContractState"/> based on the current state. /// </summary> public ISmartContractState Create(IState state, IGasMeter gasMeter, uint160 address, BaseMessage message, IStateRepository repository) { IPersistenceStrategy persistenceStrategy = new MeteredPersistenceStrategy(repository, gasMeter, new BasicKeyEncodingStrategy()); var persistentState = new PersistentState(persistenceStrategy, this.serializer, address); var contractLogger = new MeteredContractLogger(gasMeter, state.LogHolder, this.PrimitiveSerializer); var contractState = new SmartContractState( state.Block, new Message( address.ToAddress(), message.From.ToAddress(), message.Amount ), persistentState, this.serializer, gasMeter, contractLogger, this.InternalTransactionExecutorFactory.Create(state), new InternalHashHelper(), () => state.GetBalance(address)); return(contractState); }