public static Types.Transaction AddOutput(this Types.Transaction tx, Types.Output output) { return(new Types.Transaction(tx.version, tx.inputs, tx.witnesses, FSharpList <Types.Output> .Cons(output, tx.outputs), tx.contract)); }
private void AddOutput(AssetDeltas balances, Types.Output output, bool isSpending = false) { if (!balances.ContainsKey(output.spend.asset)) { balances[output.spend.asset] = 0; } balances[output.spend.asset] += isSpending ? -1 * (long)output.spend.amount : (long)output.spend.amount; }
private Key GetKey(Types.Output output) { foreach (var key in _Keys) { if (key.Address.IsMatch(output.@lock)) { return(key); } } return(null); }
protected bool CheckUTXOCOntains(Types.Output output) { var utxos = new GetUTXOSetAction().Publish().Result; foreach (var item in utxos.Item1) { if (item.Value.Contains(output)) { return(true); } } return(false); }
Types.Transaction Sign(Types.Output output, byte[] asset, ulong amount) { ulong change; var assets = new List <Asset>(); var outputs = new List <Types.Output>(); using (TransactionContext dbTx = _DBContext.GetTransactionContext()) { if (!GetAssets(dbTx, asset, amount, out change, assets)) { return(null); } else if (change > 0) { Key key; if (_KeyStore.GetUnusedKey(dbTx, out key, true)) { _Keys.Add(key); dbTx.Commit(); } outputs.Add(new Types.Output(key.Address.GetLock(), new Types.Spend(asset, change))); } } outputs.Add(output); return(TransactionValidation.signTx(new Types.Transaction( 0, ListModule.OfSeq(assets.Select(t => t.Outpoint)), ListModule.OfSeq(new List <byte[]>()), ListModule.OfSeq(outputs), null), ListModule.OfSeq(assets.Select(i => i.Key.Private)))); }
private int ExportToExcel(Input input, Output output,string fname) { int retcode = 0; Types.Input inp = new Types.Input(); Types.Output outp = new Types.Output(); fill(ref inp,ref outp, input, output); retcode = new xlexport.xlexport().export(inp, outp, fname); return retcode; }
public bool GetContractActivationTx(byte[] code, ulong zenAmount, out Types.Transaction signedTx, byte[] secureTokenHash = null) { ulong change; var assets = new List <Asset>(); var outputs = new List <Types.Output>(); using (TransactionContext dbTx = _DBContext.GetTransactionContext()) { if (!GetAssets(dbTx, Tests.zhash, zenAmount, out change, assets)) { signedTx = null; return(false); } else if (change > 0) { Key key; if (_KeyStore.GetUnusedKey(dbTx, out key, true)) { _Keys.Add(key); dbTx.Commit(); } outputs.Add(new Types.Output(key.Address.GetLock(), new Types.Spend(Tests.zhash, change))); } if (secureTokenHash != null) { ulong secureTokenChange; // var secureTokenAssets = new Assets(); if (!GetAssets(dbTx, secureTokenHash, 1, out secureTokenChange, assets)) { signedTx = null; return(false); } else if (secureTokenChange > 0) { Key key; if (_KeyStore.GetUnusedKey(dbTx, out key, true)) { _Keys.Add(key); dbTx.Commit(); } outputs.Add(new Types.Output(key.Address.GetLock(), new Types.Spend(secureTokenHash, secureTokenChange))); } } } var output = new Types.Output( Types.OutputLock.NewContractSacrificeLock( new Types.LockCore(0, ListModule.OfSeq(new byte[][] { })) ), new Types.Spend(Tests.zhash, zenAmount) ); outputs.Add(output); if (secureTokenHash != null) { outputs.Add(new Types.Output(Types.OutputLock.NewContractLock(Merkle.innerHash(code), new byte[] { }), new Types.Spend(secureTokenHash, 1))); } signedTx = TransactionValidation.signTx(new Types.Transaction( 0, ListModule.OfSeq(assets.Select(t => t.Outpoint)), ListModule.OfSeq(new List <byte[]>()), ListModule.OfSeq(outputs), new Microsoft.FSharp.Core.FSharpOption <Types.ExtendedContract>( Types.ExtendedContract.NewContract(new Types.Contract(code, new byte[] { }, new byte[] { })) ) ), ListModule.OfSeq(assets.Select(i => i.Key.Private))); return(true); }
public Types.Transaction Sign(Address address, byte[] asset, ulong amount) { var output = new Types.Output(address.GetLock(), new Types.Spend(asset, amount)); return(Sign(output, asset, amount)); }
private bool IsMatch(Types.Output output) { return(GetKey(output) != null); }