/// <summary> /// ATM calls this service to send BTC /// </summary> /// <param name="address"></param> /// <param name="btcAmount"></param> /// <returns></returns> public DC.Common.Models.Order CreateOrder(String address, Decimal btcAmount) { if (btcAmount > 0 && BitcoinHelper.IsValidAddress(address)) { //Providers.IWallet wallet = Helpers.Factory.GetWallet(); Providers.IWallet wallet = new Providers.BlockChainInfo() { MerchantId = "4ea10592-e7cb-4170-9b5b-6e94e3236bb1", Password = "******" }; //ADD YOUR BLOCK CHAIN INFO CREDS HERE! //Move to a factory to spit out order model. DC.Common.Models.Order order = new DC.Common.Models.Order() { Address = address, BTC = btcAmount }; order.Txn = wallet.Send(address, btcAmount); return(order); } else { throw new ArgumentOutOfRangeException("Check the bitcoin address is valid and amount is greater than zero."); } }
public void DecodeWifTest() { //https://en.bitcoin.it/wiki/Wallet_import_format Org.BouncyCastle.Math.BigInteger actual = BitcoinHelper.DecodeWif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ"); //Assert.IsTrue(actual.ToString() == "0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"); Assert.IsTrue(actual.ToString() == "5500171714335001507730457227127633683517613019341760098818554179534751705629"); }
public Header(string command) { var payload = new byte[] { }; Magic = 0xD9B4BEF9; Command = command.PadRight(12, '\0'); PayloadLength = 0; Checksum = BitcoinHelper.CalculateChecksum(payload); }
public void Sign(byte[] privateKey) { var publicKey = BitcoinHelper.CreatePublicKeyFromPrivate(privateKey); var transactionHash = ComputeHashBeforeSigning(); var signature = BitcoinHelper.Sign(transactionHash, privateKey); TxIns.First().CreateSignatureScript(signature, publicKey); }
public byte[] ComputeHashBeforeSigning() { var SIGHASH_ALL = new byte[] { 0x01, 0x00, 0x00, 0x00 }; var payload = GetPayload(); var extendedPayload = payload.Concat(SIGHASH_ALL).ToArray(); var hash = BitcoinHelper.CalculateHash(extendedPayload); return(hash); }
public async Task <IActionResult> Wallet(string txid) { _logger.LogInformation("New Transaction"); if (BitcoinHelper.ChechTxid(txid) && await _transactionService.IsNewSendReceiveTransactionAsync(txid)) { var updateTransactionsHostedService = _hostedServices.FirstOrDefault(x => x is UpdateTransactionsHostedService) as UpdateTransactionsHostedService; updateTransactionsHostedService?.ContinueLoop(); } return(StatusCode(200)); }
public async Task <IActionResult> SendBtc([FromQuery] string address, [FromQuery] decimal amount, [FromQuery] string fromWallet = null) { if (!BitcoinHelper.CheckAddress(address) && !(await _bitcoindClient.ValidateAddressAsync(address)).Isvalid) { return(StatusCode(400, $"invalid address ({address})")); } if (amount <= 0) { return(StatusCode(400, $"invalid amount ({amount})")); } await _bitcoindClient.SendToAddressAsync(address, amount, fromWallet); return(StatusCode(200)); }
public VersionMessage(ShortNetworkAddress recipientAddress, ShortNetworkAddress senderAddress) { Header = new Header("version"); ProtocolVersion = 70002; Services = 1; Timestamp = BitcoinHelper.GetCurrentTimeStamp(); RecipientAddress = recipientAddress; SenderAddress = senderAddress; Nonce = 0; UserAgent = "/MikoleuszBlogBitcoinTinyClient:1.0/"; UserAgentLength = new VarInt(Convert.ToUInt64(UserAgent.Length)); StartHeight = 460650; Relay = true; ComputeHeader(); }
public static TxMessage Create( string previousTransactionIdHex, string senderBitcoinAddress, string senderPrivateKeyHex, string recipientBitcoinAddress, double transactionAmountInBtc) { var txMessage = new TxMessage(); var senderPrivateKey = StringHelper.HexStringToByteArray(senderPrivateKeyHex); var scriptPubKeyPreviousTransaction = new ScriptPubKey( BitcoinHelper.Create160BitPublicKeyFromBitcoinAddress(senderBitcoinAddress) ); var scriptPubKeyCurrentTransaction = new ScriptPubKey( BitcoinHelper.Create160BitPublicKeyFromBitcoinAddress(recipientBitcoinAddress) ); var txInOutPoint = new OutPoint( StringHelper.HexStringToByteArray(previousTransactionIdHex), 0 ); txMessage.TxInsCount = new VarInt(1); txMessage.TxIns = new List <TxIn> { new TxIn(txInOutPoint, scriptPubKeyPreviousTransaction.ToBytes()) }; txMessage.TxOutsCount = new VarInt(1); txMessage.TxOuts = new List <TxOut> { new TxOut( Convert.ToUInt64(transactionAmountInBtc * 100000000), scriptPubKeyCurrentTransaction ) }; txMessage.Sign(senderPrivateKey); return(txMessage); }
/// <summary> /// ATM calls this service to send BTC /// </summary> /// <param name="address"></param> /// <param name="btcAmount"></param> /// <returns></returns> public DC.Common.Models.Order CreateOrder(String address, Decimal btcAmount) { if (btcAmount > 0 && BitcoinHelper.IsValidAddress(address)) { // Buy Bitcoin- https://blockchain.info/address/1QJQMFhgyoiLLUZXpr913T2TaEaX7pNFaF DigitalBTC digitalbtc = new DigitalBTC(); PriceData pricedata = digitalbtc.GetSpotPrice2(btcAmount, "USD"); if (pricedata.Price > 0) { pricedata.Price += 1M; float price = (float)pricedata.Price; float btcorderamount = (float)btcAmount; OrderData orderdata = digitalbtc.Order(price, btcorderamount); } // Sell Bitcoin //Providers.IWallet wallet = Helpers.Factory.GetWallet(); Providers.IWallet wallet = new Providers.BlockChainInfo() { MerchantId = "4ea10592-e7cb-4170-9b5b-6e94e3236bb1", Password = "******" }; //ADD YOUR BLOCK CHAIN INFO CREDS HERE! //Move to a factory to spit out order model. DC.Common.Models.Order order = new DC.Common.Models.Order() { Address = address, BTC = btcAmount }; order.Txn = wallet.Send(address, btcAmount); return(order); } else { throw new ArgumentOutOfRangeException("Check the bitcoin address is valid and amount is greater than zero."); } }
public void CalculateChecksum(byte[] payload) { PayloadLength = Convert.ToUInt32(payload.Length); Checksum = BitcoinHelper.CalculateChecksum(payload); }