utd币最新价格(utd币合法吗)

「区块链研究实验室」如何发布属于自己基于比特币的彩色币

前言

为了这个练习的目的,我们会发布一款区块链编程数字货币。您为我发送的每个0.004比特币获得一个区块链编程数字货币。

我们一起学习如何编写这样的功能。

发行彩色币

在Open Asset中,资产ID来源于发行人的ScriptPubKey。

如果您想发行彩色币,则需要证明此类ScriptPubKey的所有权。 在Blockchain上做这件事的唯一方法就是花钱购买属于这种ScriptPubKey的硬币。

您将选择花钱发行彩色硬币的硬币在NBitcoin中被称为“发行硬币”。

我们发出一个比特币资产地址:1KF8kUVHK42XzgcmJF4Lxz4wcL5WDL97PB。

看看我的余额,我决定使用下面的硬币发行数字货币资产:

{

“transactionId”: “eb49a599c749c82d824caf9dd69c4e359261d49bbb0b9d6dc18c59bc9214e43b”,

“index”: 0,

“value”: 2000000,

“scriptPubKey”: “76a914c81e8e7b7ffca043b088a992795b15887c96159288ac”,

“redeemScript”: null

}

以下是如何创建我的发行币:

var coin = new Coin(

fromTxHash: new uint256(“eb49a599c749c82d824caf9dd69c4e359261d49bbb0b9d6dc18c59bc9214e43b”),

fromOutputIndex: 0,

amount: Money.Satoshis(2000000),

scriptPubKey: new Script(Encoders.Hex.DecodeData(“76a914c81e8e7b7ffca043b088a992795b15887c96159288ac”)));

var issuance = new IssuanceCoin(coin);

现在我需要在TransactionBuilder的帮助下构建事务并签署事务。

var nico = BitcoinAddress.Create(“15sYbVpRh6dyWycZMwPdxJWD4xbfxReeHe”);

var bookKey = new BitcoinSecret(“???????”);

TransactionBuilder builder = new TransactionBuilder();

var tx = builder

.AddKeys(bookKey)

.AddCoins(issuance)

.IssueAsset(nico, new AssetMoney(issuance.AssetId, quantity: 10))

.SendFees(Money.Coins(0.0001m))

.SetChange(bookKey.GetAddress())

.BuildTransaction(true); Console.WriteLine(tx);

{

“out”: [ {

“value”: “0.00000600”,

“scriptPubKey”: “OP_DUP OP_HASH160 356facdac5f5bcae995d13e667bb5864fd1e7d59 OP_EQUALVERIFY OP_CHECKSIG” },

{ “value”: “0.01989400”,

“scriptPubKey”: “OP_DUP OP_HASH160 c81e8e7b7ffca043b088a992795b15887c961592 OP_EQUALVERIFY OP_CHECKSIG” },

{ “value”: “0.00000000”,

“scriptPubKey”: “OP_RETURN 4f410100010a00”

}

]

}

你可以看到它包含一个OP_RETURN输出。 事实上,这是有关彩色硬币信息填写的位置。这是OP_RETURN中数据的格式。

「区块链研究实验室」如何发布属于自己基于比特币的彩色币

在我们的案例中,数量只有10个,这是我发给nico的资产数量。 元数据是任意数据。 我们会看到我们可以放置一个指向“资产定义”的网址。

资产定义是描述资产的文档。 这是可选的,我们没有在我们的案例中使用它。

欲了解更多信息,请查阅Open Asset Specification。

交易验证后,它已准备好发送到网络。

Console.WriteLine(builder.Verify(tx));

QBitNinja

var client = new QBitNinjaClient(Network.Main);

BroadcastResponse broadcastResponse = client.Broadcast(tx).Result;

if (!broadcastResponse.Success) {

Console.WriteLine(“ErrorCode: ” + broadcastResponse.Error.ErrorCode);

Console.WriteLine(“Error message: ” + broadcastResponse.Error.Reason);

}

else{

Console.WriteLine(“Success!”);

}

本地比特币核心代码

using (var node = Node.ConnectToLocal(Network.Main)) //Connect to the node

{

node.VersionHandshake(); //Say hello

//Advertize your transaction (send just the hash)

node.SendMessage(new InvPayload(InventoryType.MSG_TX, tx.GetHash()));

//Send it

node.SendMessage(new TxPayload(tx));

Thread.Sleep(500); //Wait a bit

}

我的比特币钱包具有书本地址和“Nico”地址

「区块链研究实验室」如何发布属于自己基于比特币的彩色币

正如你所看到的,比特币核心只显示我支付的0.0001 BTC的费用,并且由于防止垃圾邮件功能而忽略600 Satoshi硬币。

这款经典的比特币钱包对彩色硬币一无所知。

更糟糕的是:如果一个传统的比特币钱包花了一个彩色硬币,它将破坏标的资产并仅转移TxOut的比特币值(600 satoshi)。

为了防止用户将彩色硬币发送到不支持彩色钱币的钱包,Open Asset具有自己的地址格式,只有彩色硬币钱包才能知道。

nico = BitcoinAddress.Create(“15sYbVpRh6dyWycZMwPdxJWD4xbfxReeHe”);

Console.WriteLine(nico.ToColoredAddress());

akFqRqfdmAaXfPDmvQZVpcAQnQZmqrx4gcZ

现在,您可以查看像Coinprism这样的Open Asset兼容钱包,并查看我的资产是否正确检测到:

「区块链研究实验室」如何发布属于自己基于比特币的彩色币

正如我之前告诉过你的,资产ID是从发行者的ScriptPubKey派生的,下面是如何在代码中获取它:

var book = BitcoinAddress.Create(“1KF8kUVHK42XzgcmJF4Lxz4wcL5WDL97PB”);

var assetId = new AssetId(book).GetWif(Network.Main);

Console.WriteLine(assetId); // AVAVfLSb1KZf9tJzrUVpktjxKUXGxUTD4e

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!