public override void AddContract(VerificationContract contract) { base.AddContract(contract); using (WalletDataContext ctx = new WalletDataContext(DbPath)) { Contract db_contract = ctx.Contracts.FirstOrDefault(p => p.ScriptHash.SequenceEqual(contract.ScriptHash.ToArray())); if (db_contract != null) { db_contract.PublicKeyHash = contract.PublicKeyHash.ToArray(); } else { Address db_address = ctx.Addresses.FirstOrDefault(p => p.ScriptHash.SequenceEqual(contract.ScriptHash.ToArray())); if (db_address == null) { ctx.Addresses.Add(new Address { ScriptHash = contract.ScriptHash.ToArray() }); } ctx.Contracts.Add(new Contract { RawData = contract.ToArray(), ScriptHash = contract.ScriptHash.ToArray(), PublicKeyHash = contract.PublicKeyHash.ToArray() }); } ctx.SaveChanges(); } }
public void TestSerialize() { byte[] privateKey = new byte[32]; using (RandomNumberGenerator rng = RandomNumberGenerator.Create()) { rng.GetBytes(privateKey); } KeyPair key = new KeyPair(privateKey); VerificationContract contract1 = new VerificationContract { Script = Neo.SmartContract.Contract.CreateSignatureRedeemScript(key.PublicKey), ParameterList = new[] { ContractParameterType.Signature } }; byte[] byteArray = contract1.ToArray(); byte[] script = Neo.SmartContract.Contract.CreateSignatureRedeemScript(key.PublicKey); byte[] result = new byte[43]; result[0] = 0x01; result[1] = (byte)ContractParameterType.Signature; result[2] = 0x28; Array.Copy(script, 0, result, 3, 40); CollectionAssert.AreEqual(result, byteArray); }