Example #1
0
        public void NonStandardSign(Script sigScript, ITxOutput spentOutput)
        {
            var spentOutpoint = ((BitcoinBasedTxOutput)spentOutput).Coin.Outpoint;
            var input         = Tx.Inputs.FindIndexedInput(spentOutpoint);

            input.ScriptSig = sigScript;
        }
Example #2
0
        public void Sign(Key privateKey, ITxOutput spentOutput)
        {
            var output   = (BitcoinBasedTxOutput)spentOutput;
            var currency = (BitcoinBasedCurrency)Currency;

            Tx.Sign(new BitcoinSecret(privateKey, currency.Network), output.Coin);
        }
Example #3
0
        public void Sign(
            Key privateKey,
            ITxOutput spentOutput)
        {
            var output = (BitcoinBasedTxOutput)spentOutput;

            Tx.Sign(privateKey, output.Coin);
        }
Example #4
0
        public byte[] GetSignatureHash(Script redeemScript, ITxOutput spentOutput)
        {
            var coin = ((BitcoinBasedTxOutput)spentOutput).Coin;

            var scriptCoint = new ScriptCoin(coin, redeemScript);

            return(Tx.GetSignatureHash(scriptCoint).ToBytes());
        }
Example #5
0
        public void Sign(
            SecureBytes privateKey,
            ITxOutput spentOutput,
            BitcoinBasedConfig bitcoinBasedConfig)
        {
            using var scopedPrivateKey = privateKey.ToUnsecuredBytes();

            Sign(new Key(scopedPrivateKey), spentOutput, bitcoinBasedConfig); // todo: do not use NBitcoin.Key
        }
Example #6
0
        public void Sign(
            Key privateKey,
            ITxOutput spentOutput,
            BitcoinBasedConfig bitcoinBasedConfig)
        {
            var output = (BitcoinBasedTxOutput)spentOutput;

            Tx.Sign(new BitcoinSecret(privateKey, bitcoinBasedConfig.Network), output.Coin);
        }
Example #7
0
        public bool Verify(
            ITxOutput spentOutput,
            BitcoinBasedConfig bitcoinBasedConfig,
            bool checkScriptPubKey = true)
        {
            var result = bitcoinBasedConfig.Network.CreateTransactionBuilder()
                         .SetTransactionPolicy(new StandardTransactionPolicy
            {
                CheckScriptPubKey = checkScriptPubKey,
                ScriptVerify      = ScriptVerify.Standard
            })
                         .AddCoins(((BitcoinBasedTxOutput)spentOutput).Coin)
                         .Verify(Tx, out _);

            return(result);
        }
Example #8
0
        public bool Verify(
            ITxOutput spentOutput)
        {
            if (!(Currency is BitcoinBasedCurrency btcBaseCurrency))
            {
                throw new NotSupportedException("Currency must be Bitcoin based");
            }

            var result = btcBaseCurrency.Network.CreateTransactionBuilder()
                         .SetTransactionPolicy(new StandardTransactionPolicy {
                CheckScriptPubKey = false, ScriptVerify = ScriptVerify.Standard
            })
                         .AddCoins(((BitcoinBasedTxOutput)spentOutput).Coin)
                         .Verify(Tx, out _);

            return(result);
        }
Example #9
0
        private async Task UpsertOutputAsync(
            Currency currency,
            ITxOutput output,
            string address)
        {
            var addressOutputs = (await DataRepository
                                  .GetOutputsAsync(currency.Name, address, currency.OutputType())
                                  .ConfigureAwait(false))
                                 .ToList();

            addressOutputs.Add(output);

            await DataRepository
            .UpsertOutputsAsync(
                outputs : addressOutputs.RemoveDuplicates(),
                currency : currency.Name,
                address : address)
            .ConfigureAwait(false);
        }
Example #10
0
        public bool Verify(
            ITxOutput spentOutput,
            out Error[] errors,
            BitcoinBasedConfig bitcoinBasedConfig,
            bool checkScriptPubKey = true)
        {
            var result = bitcoinBasedConfig.Network.CreateTransactionBuilder()
                         .SetTransactionPolicy(new StandardTransactionPolicy
            {
                CheckScriptPubKey = checkScriptPubKey,
                ScriptVerify      = ScriptVerify.Standard
            })
                         .AddCoins(((BitcoinBasedTxOutput)spentOutput).Coin)
                         .Verify(Tx, out var policyErrors);

            errors = policyErrors
                     .Select(pe => new Error(Errors.TransactionVerificationError, pe.ToString()))
                     .ToArray();

            return(result);
        }
Example #11
0
        public bool Verify(
            ITxOutput spentOutput,
            out Error[] errors)
        {
            if (!(Currency is BitcoinBasedCurrency btcBaseCurrency))
            {
                throw new NotSupportedException("Currency must be Bitcoin based");
            }

            var result = btcBaseCurrency.Network.CreateTransactionBuilder()
                         .SetTransactionPolicy(new StandardTransactionPolicy {
                CheckScriptPubKey = false, ScriptVerify = ScriptVerify.Standard
            })
                         .AddCoins(((BitcoinBasedTxOutput)spentOutput).Coin)
                         .Verify(Tx, out var policyErrors);

            errors = policyErrors
                     .Select(pe => new Error(Errors.TransactionVerificationError, pe.ToString()))
                     .ToArray();

            return(result);
        }
Example #12
0
        public static int EstimateSigSize(ITxOutput output, bool forRefund = false, bool forRedeem = false)
        {
            if (!(output is BitcoinBasedTxOutput btcBasedOutput))
            {
                return(0);
            }

            var sigSize = 0;

            if (btcBasedOutput.IsP2Pkh)
            {
                sigSize += P2PkhScriptSigSize; // use compressed?
            }
            else if (btcBasedOutput.IsSegwitP2Pkh)
            {
                sigSize += P2WPkhScriptSigSize;
            }
            else if (btcBasedOutput.IsP2PkhSwapPayment || btcBasedOutput.IsHtlcP2PkhSwapPayment)
            {
                sigSize += forRefund
                    ? P2PkhSwapRefundSigSize
                    : P2PkhSwapRedeemSigSize;
            }
            else if (btcBasedOutput.IsP2Sh)
            {
                sigSize += forRefund
                    ? P2PShSwapRefundScriptSigSize
                    : (forRedeem
                        ? P2PShSwapRedeemScriptSigSize
                        : P2PkhScriptSigSize); // todo: probably incorrect
            }
            else
            {
                Log.Warning("Unknown output type, estimated fee may be wrong");
            }

            return(sigSize);
        }
Example #13
0
 public byte[] GetSignatureHash(
     ITxOutput spentOutput)
 {
     return(Tx.GetSignatureHash(((BitcoinBasedTxOutput)spentOutput).Coin).ToBytes());
 }
Example #14
0
 public void NonStandardSign(
     byte[] sigScript,
     ITxOutput spentOutput)
 {
     NonStandardSign(new Script(sigScript), spentOutput);
 }
Example #15
0
 public void Sign(
     byte[] privateKey,
     ITxOutput spentOutput)
 {
     Sign(new Key(privateKey), spentOutput);
 }
        public void AddData(string data)
        {
            List <BrowserDBData> dbData = JsonConvert.DeserializeObject <List <BrowserDBData> >(data);

            foreach (var dbObj in dbData)
            {
                if (dbObj.type == AvailableDataType.WalletAddress.ToString())
                {
                    _addresses[dbObj.id] =
                        _bsonMapper.ToObject <WalletAddress>(
                            BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data)));
                }
                else if (dbObj.type == AvailableDataType.Transaction.ToString())
                {
                    string[] parsedId = dbObj.id.Split(Convert.ToChar("/"));
                    string   id       = parsedId[0];
                    string   currency = parsedId[1];

                    BsonDocument bd = BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data));
                    _transactions[$"{id}:{currency}"] = (IBlockchainTransaction)_bsonMapper.ToObject(doc: bd,
                                                                                                     type: _currencies.GetByName(currency).TransactionType);
                }
                else if (dbObj.type == AvailableDataType.Swap.ToString())
                {
                    _swaps[long.Parse(dbObj.id)] =
                        _bsonMapper.ToObject <Swap>(
                            BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data)));
                }
                else if (dbObj.type == AvailableDataType.Output.ToString())
                {
                    string[] parsedId = dbObj.id.Split(Convert.ToChar("/"));
                    string   id       = parsedId[0];
                    string   currency = parsedId[1];
                    string   address  = parsedId[2];

                    BsonDocument       bd = BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data));
                    BitcoinBasedConfig BtcBasedCurrency = _currencies.Get <BitcoinBasedConfig>(currency);
                    ITxOutput          output           =
                        (ITxOutput)_bsonMapper.ToObject(doc: bd, type: BtcBasedCurrency.OutputType());

                    _outputs[id] = new OutputEntity {
                        Output = output, Currency = currency, Address = address
                    };
                }
                else if (dbObj.type == AvailableDataType.Order.ToString())
                {
                    _orders[dbObj.id] =
                        _bsonMapper.ToObject <Order>(
                            BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data)));
                }

                else if (dbObj.type == AvailableDataType.TezosTokenAddress.ToString())
                {
                    _tezosTokensAddresses[dbObj.id] = _bsonMapper.ToObject <WalletAddress>(
                        BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data)));
                }

                else if (dbObj.type == AvailableDataType.TezosTokenContract.ToString())
                {
                    _tezosTokensContracts[dbObj.id] =
                        _bsonMapper.ToObject <TokenContract>(
                            BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data)));
                }

                else if (dbObj.type == AvailableDataType.TezosTokenTransfer.ToString())
                {
                    _tezosTokensTransfers[dbObj.id] =
                        _bsonMapper.ToObject <TokenTransfer>(
                            BsonSerializer.Deserialize(Convert.FromBase64String(dbObj.data)));
                }
            }
        }