public async Task <Address> Prepare(byte[] contractCode) { //create smart contact zero var reg = new SmartContractRegistration { Category = 0, ContractBytes = ByteString.CopyFrom(SmartContractZeroCode), ContractHash = Hash.FromRawBytes(SmartContractZeroCode), Type = (int)SmartContractType.BasicContractZero }; var chain = await _chainCreationService.CreateNewChainAsync(ChainId, new List <SmartContractRegistration> { reg }); var contractAddressZero = _chainCreationService.GenesisContractHash(ChainId, SmartContractType.BasicContractZero); //deploy token contract var code = contractCode; var txnDep = new Transaction() { From = Address.Zero, To = contractAddressZero, IncrementId = 0, MethodName = "DeploySmartContract", Params = ByteString.CopyFrom(ParamsPacker.Pack(1, code)) }; var txnCtxt = new TransactionContext() { Transaction = txnDep }; var executive = await _smartContractService.GetExecutiveAsync(contractAddressZero, ChainId); try { await executive.SetTransactionContext(txnCtxt).Apply(); await txnCtxt.Trace.CommitChangesAsync(_stateStore); } finally { await _smartContractService.PutExecutiveAsync(contractAddressZero, executive); } var contractAddr = txnCtxt.Trace.RetVal.Data.DeserializeToPbMessage <Address>(); return(contractAddr); }
private Address GetGenesisContractHash(SmartContractType contractType) { return(_chainCreationService.GenesisContractHash(Hash.LoadHex(ChainConfig.Instance.ChainId), contractType)); }