/// <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 }); } }
/// <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(); } }