コード例 #1
0
        /// <summary>
        /// Migrate contract, save immediately
        /// </summary>
        /// <param name="contract"></param>
        /// <param name="migrateContract"></param>
        /// <param name="txId"></param>
        /// <param name="time"></param>
        public void MigrateContract(UInt160 contract, Nep5ContractInfo migrateContract, UInt256 txId, DateTime time)
        {
            var migrateContractHash = migrateContract.Hash.ToBigEndianHex();
            var tx = txId.ToBigEndianHex();
            var old = GetActiveContract(contract);
            if (old != null)
            {
                old.DeleteOrMigrateTxId = tx;
                old.MigrateTo = migrateContractHash;
                old.MigrateTime = time;
                var newContract = new ContractEntity()
                {
                    Hash = migrateContractHash,
                    Name = migrateContract.Name,
                    Symbol = migrateContract.Symbol,
                    Decimals = migrateContract.Decimals,
                    CreateTime = migrateContract.CreateTime,
                    CreateTxId = tx,
                };
                _sqldb.Contracts.Add(newContract);
                _sqldb.SaveChanges();

                _sqldb.InvokeRecords.Add(new InvokeRecordEntity()
                {
                    ContractId = newContract.Id,
                    TxId = tx,
                    Methods = "Deployed"
                });
                _sqldb.SaveChanges();
                // migrate balance records to new contract
                _sqldb.AssetBalances.Where(a => a.AssetId == old.Id).BatchUpdate(new AssetBalanceEntity() { AssetId = newContract.Id });
            }
        }
コード例 #2
0
        /// <summary>
        /// Create contract, save immediately
        /// </summary>
        /// <param name="newContract"></param>
        public void CreateContract(Nep5ContractInfo newContract)
        {
            var contractHash = newContract.Hash.ToBigEndianHex();
            var old = GetActiveContract(newContract.Hash);
            if (old == null)
            {
                var contract = new ContractEntity()
                {
                    Hash = contractHash,
                    Name = newContract.Name,
                    Symbol = newContract.Symbol,
                    Decimals = newContract.Decimals,
                    CreateTime = newContract.CreateTime,
                    CreateTxId = newContract.CreateTxId?.ToBigEndianHex(),
                };
                _sqldb.Contracts.Add(contract);
                _sqldb.SaveChanges();

                //save create contract transaction record
                _sqldb.InvokeRecords.Add(new InvokeRecordEntity()
                {
                    ContractId = contract.Id,
                    TxId = contract.CreateTxId,
                    Methods = "Deployed"
                });
                _sqldb.SaveChanges();
            }
        }