我试着理解比特币交易。我使用位核心Javascript库。
我有一个源代码Wallet1 (Address1 1/PublicKey1和PrivateKey1) -有10个比特币(简化)。
现在一个朋友给了我他的Wallet2 (地址2/PublicKey2),并且想要接收1枚比特币。
当我阅读文档时,对于一个简单的事务(1-to-1),代码如下所示:
var transaction = new Transaction()
.from(utxos) // Feed information about what unspent outputs one can use
.to(address, amount) // Add an output with the given amount of satoshis
.change(address) // Sets up a change address where the rest of the funds will go
.fee(5430) // Minimum non-dust amount
.sign(privkeySet) // Signs all the inputs it can
但我有以下问题:
utxos
函数的参数是什么.from(utxos)
函数是什么。这是我的PublicKey1 Wallet1吗?.to(address)
函数的参数.to(address)
是“我的朋友”的PublicKey2 Wallet2?change(address)
函数的参数change(address)
是一个新的Address3,它属于MY Wallet3,我必须在进行事务之前创建它?=> --这意味着我需要知道这个Wallet3的PrivateKey3,而这是Wallet3,我将得到9个比特币中的其余部分?=>可以不使用.change(address)
函数来完成事务吗?如果我说,我不想把剩下的9枚比特币转移到新地址?他们应该留在原来的Wallet1里吗?.fee(5430)
意味着我将花费5430Satoshi=0.2337424950美元进行这笔交易?privkeySet
函数中的.sign(privkeySet)
是原始Wallet1中的PrivateKey1,对吗?在此.sign()
函数之后,事务将被“触发”并完成工作?
非常感谢您的支持。发布于 2017-10-16 03:56:31
.from( utxos )函数中的参数utxos是什么?这是我的PublicKey1 Wallet1吗?
这些都是您可以使用的输出(即以前事务中的未用输出)。
https://bitcore.io/api/lib/unspent-output
.to(地址)函数的参数地址是“我的朋友”的PublicKey2 Wallet2?
地址不一定仅从目标公钥派生。您需要阅读p2sh/p2pkh/p2pk地址是如何生成的。
但是通常情况下,如果您只想支付具有简单开销条件的人,则要支付的规范地址只是一个p2pkh
地址,该地址是从收件人的公钥派生出来的。
https://bitcore.io/api/lib/address
// recipientPublicKey should be provided
var address = new Address(recipientPublicKey);
// alternative interface
var address = Address.fromPublicKey(recipientPublicKey);
不过,通常情况下,你的朋友应该提供给你一个地址,这样你就不用担心地址的生成了。上面的示例假设您的朋友提供了他们的公钥(无论出于什么原因)。
变更(地址)函数的参数地址是一个新的Address3,它属于我的Wallet3,我必须在进行事务之前创建它?=> --这意味着我需要知道这个Wallet3的PrivateKey3,而这是Wallet3,我将得到9个比特币中的其余部分?=>,没有这个.change(地址)函数,能完成事务吗?如果我说,我不想把剩下的9枚比特币转移到新地址?他们应该留在原来的Wallet1里吗?
您需要一个更改地址,除非您正在花费的UTXO等于您发送给您的朋友的金额+费用。通常,生成一个新的键盘和地址作为更改地址是很好的做法,因为地址再使用通常被认为是不好的。但是,也可以为wallet1
重用您的地址。
.fee( 5430 )意味着我将花费5430Satoshi=0.2337424950美元进行这笔交易?
是。
privkeySet in .sign(privkeySet)函数是原始Wallet1中的PrivateKey1,对吗?在此.sign()函数之后,事务将被“触发”并完成工作?
签名后,您需要序列化您的事务。序列化后,您应该得到一个十六进制ASCII字符串,您可以使用该字符串使用第三方提供商或您自己的比特币节点向比特币网络广播。
bitcoin-cli sendrawtransaction <serialized transaction>
https://stackoverflow.com/questions/46528602
复制相似问题