Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 private Address GetGenesisContractHash(SmartContractType contractType)
 {
     return(_chainCreationService.GenesisContractHash(Hash.LoadHex(ChainConfig.Instance.ChainId), contractType));
 }