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));
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        private Key GetKey(Types.Output output)
        {
            foreach (var key in _Keys)
            {
                if (key.Address.IsMatch(output.@lock))
                {
                    return(key);
                }
            }

            return(null);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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))));
        }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
 private bool IsMatch(Types.Output output)
 {
     return(GetKey(output) != null);
 }