Transaction

dd84a84c053a98c025ff882131a6b2d1a0389770940d9a2421e28ff9e9b670de
( - )
265,014
2019-04-15 06:27:37
1
22,289 B

1 Output

Total Output:
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutMV<!DOCTYPE html> <html> <head><meta name="generator" content="Hexo 3.8.0"> <meta charset="utf-8"> <title>Metanet应用开发 | Monkeylord&#39;s Blog</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="description" content="课程准备 可用的MoneyButton钱包 顺手的文本编辑器(记事本也可以) 背景知识开始理解Metanet应用开发前,首先了解一些比特币的基础知识,这样可以构成理解的基础。 最广泛的理解里,比特币网络基于共识运行。那么,共识本身是什么呢?背后有哪些组成呢? 时间有限,这里不一一解释,仅关注对于应用开发入门比较重要的部分,他们是UTXO模型、 P2P网络 以及OP_RETURN UTXO模型众所"> <meta property="og:type" content="article"> <meta property="og:title" content="Metanet应用开发"> <meta property="og:url" content="./2019/03/11/Metanet应用开发/index.html"> <meta property="og:site_name" content="Monkeylord&#39;s Blog"> <meta property="og:description" content="课程准备 可用的MoneyButton钱包 顺手的文本编辑器(记事本也可以) 背景知识开始理解Metanet应用开发前,首先了解一些比特币的基础知识,这样可以构成理解的基础。 最广泛的理解里,比特币网络基于共识运行。那么,共识本身是什么呢?背后有哪些组成呢? 时间有限,这里不一一解释,仅关注对于应用开发入门比较重要的部分,他们是UTXO模型、 P2P网络 以及OP_RETURN UTXO模型众所"> <meta property="og:locale" content="default"> <meta property="og:updated_time" content="2019-03-11T08:07:26.535Z"> <meta name="twitter:card" content="summary"> <meta name="twitter:title" content="Metanet应用开发"> <meta name="twitter:description" content="课程准备 可用的MoneyButton钱包 顺手的文本编辑器(记事本也可以) 背景知识开始理解Metanet应用开发前,首先了解一些比特币的基础知识,这样可以构成理解的基础。 最广泛的理解里,比特币网络基于共识运行。那么,共识本身是什么呢?背后有哪些组成呢? 时间有限,这里不一一解释,仅关注对于应用开发入门比较重要的部分,他们是UTXO模型、 P2P网络 以及OP_RETURN UTXO模型众所"> <link rel="icon" href="favicon.png"> <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="../../../../css/style.css"> </head> </html> <body> <div id="container"> <div id="wrap"> <header id="header"> <div id="banner"></div> <div id="header-outer" class="outer"> <div id="header-title" class="inner"> <h1 id="logo-wrap"> <a href="../../../../index.html" id="logo">Monkeylord&#39;s Blog</a> </h1> </div> <div id="header-inner" class="inner"> <nav id="main-nav"> <a id="main-nav-toggle" class="nav-icon"></a> <a class="main-nav-link" href="../../../../index.html">Home</a> <a class="main-nav-link" href="../../../../archives/">Archives</a> </nav> <nav id="sub-nav"> <a id="nav-search-btn" class="nav-icon" title="Search"></a> </nav> <div id="search-form-wrap"> <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="."></form> </div> </div> </div> </header> <div class="outer"> <section id="main"><article id="post-Metanet应用开发" class="article article-type-post" itemscope itemprop="blogPost"> <div class="article-meta"> <a href class="article-date"> <time datetime="2019-03-11T08:05:42.000Z" itemprop="datePublished">2019-03-11</time> </a> </div> <div class="article-inner"> <header class="article-header"> <h1 class="article-title" itemprop="name"> Metanet应用开发 </h1> </header> <div class="article-entry" itemprop="articleBody"> <h3 id="课程准备"><a href="#课程准备" class="headerlink" title="课程准备"></a>课程准备</h3><ol> <li>可用的MoneyButton钱包</li> <li>顺手的文本编辑器(记事本也可以)</li> </ol> <h3 id="背景知识"><a href="#背景知识" class="headerlink" title="背景知识"></a>背景知识</h3><p>开始理解Metanet应用开发前,首先了解一些比特币的基础知识,这样可以构成理解的基础。</p> <p>最广泛的理解里,比特币网络基于共识运行。那么,共识本身是什么呢?背后有哪些组成呢?</p> <p>时间有限,这里不一一解释,仅关注对于应用开发入门比较重要的部分,他们是<code>UTXO模型</code>、 <code>P2P网络</code> 以及<code>OP_RETURN</code></p> <h4 id="UTXO模型"><a href="#UTXO模型" class="headerlink" title="UTXO模型"></a>UTXO模型</h4><p>众所周知的是比特币具有一个个<code>地址</code>,用户掌握<code>私钥</code>,通过<code>签名</code>去花费比特币,有时还会产生<code>找零</code>。</p> <p>大部分时候,我们使用作为现金的比特币时是不需要知道其怎么工作的,这些事情由钱包处理。</p> <p>但是,钱到底是如何表示的呢?</p> <p>我们需要理解交易,或者说“事务”,这是比特币网络里的第一公民,连区块链都是从属于它的。区块链是比特币网络中的一部分,但不是全部,整个混合起来的比特币网络,就叫做metanet。</p> <p>什么是交易呢?</p> <p>交易就是一个输入输出的集合,输出就是这笔交易创造的<code>交易输出</code>,也就是钱包里看到的比特币。输入则是其他交易的<code>交易输出</code>,我们可以看到输入输出之间是一一对应的,不同交易之间通过输入输出联系到了一起,构成了一张有向无环图。这个图的末端,有一些没有指向<code>交易输入</code>的<code>交易输出</code>,我们把它们称之为<code>未花费交易输出</code>,也就是钱包里看到的比特币余额。</p> <p>另外还有一些特殊的输出,比如说交易备注,也就是OP_RETURN,也是一种输出,不过这种输出的金额为0,已经无法继续被花费,所以就不算是未花费了,不算在UTXO里,但是会被记录在区块链中。</p> <p>最近BSV网络玩出了许多花样,大部分就是基于的OP_RETURN,在比特币网络中永久留下了不可被篡改的交易备注作为数据。</p> <h4 id="P2P节点网络"><a href="#P2P节点网络" class="headerlink" title="P2P节点网络"></a>P2P节点网络</h4><h5 id="什么是P2P节点网络。"><a href="#什么是P2P节点网络。" class="headerlink" title="什么是P2P节点网络。"></a>什么是P2P节点网络。</h5><p>BT下载很多人都用过,电驴也有很多人用过,这些网络就是P2P网络。</p> <p>P2P网络是一种由许多平等地位的节点组成的网络,每个节点不论其是何种类型的,都可以通过P2P协议接入到这个网络中。</p> <p>节点们在比特币协议中地位是平等的。不过需要注意这种平等并非民主主义下所谓的”结果正义“的平等,而是在自由意志主义意义下,人人都能够凭借自己的实力进行充分的竞争的”机会平等“。</p> <p>有的节点擅长挖矿,那么它就可以成为专业的矿工节点,有的节点擅长记录,那么它可以成为存储节点,有的节点专注于提高网络连通性,那么它会成为很多节点间的中继,有的节点向网络外提供服务,那么它就是节点网络对外的接口节点。理想状态下,比特币网络通过充分的市场竞争,会形成专业分工。</p> <p>并不是每个节点都要具有同样的算力,同样的带宽,同样的存储能力,那是树莓派平均主义。树莓派平均主义不能提供节点竞争的环境,节点技术无法自发地向前发展,从而完全取决于开发者的喜好。就是这种思想就是导致了BSV打出103M区块时BTC却还在1M踌躇不前的原因。</p> <h5 id="比特币节点网络的协议"><a href="#比特币节点网络的协议" class="headerlink" title="比特币节点网络的协议"></a>比特币节点网络的协议</h5><p>那么一个新的节点是如何接入到节点网络,广播数据并接收广播的呢?</p> <p>首先,你需要知道其他节点在哪里,才能连接到其他节点。</p> <p>因此比特币协议里设计了一个伙伴发现机制,即,你向你连接的节点请求获得它知道的节点。这样随着你的连接,你就能得知足够的伙伴。</p> <p>不过问题来了,初始的伙伴如何去发现呢?这就要靠代码里内置的DNS节点,它是最初的伙伴。</p> <p>伙伴节点发现-DNS种子<a href="https://github.com/bitcoin-sv/bitcoin-sv/blob/master/src/seeder/main.cpp#L445" target="_blank" rel="noopener">https://github.com/bitcoin-sv/bitcoin-sv/blob/master/src/seeder/main.cpp#L445</a></p> <p>当你连接到伙伴节点后,你们就开始一系列的数据交换了,交易、数据,各种各样的消息在整个网络中传播。</p> <p>比特币节点P2P网络协议:<a href="https://en.bitcoin.it/wiki/Protocol_documentation" target="_blank" rel="noopener">https://en.bitcoin.it/wiki/Protocol_documentation</a></p> <h5 id="技术上如何理解比特币网络"><a href="#技术上如何理解比特币网络" class="headerlink" title="技术上如何理解比特币网络"></a>技术上如何理解比特币网络</h5><p>可以注意到的是,数据在交换的时候,仅仅是数据本身,并不包含数据来源,因此就像一滴水滴到大海里,迅速扩散,而无法溯源。当数据进入到节点网络中时,它就可以被认为是公共数据了。</p> <p>因此,比特币的节点网络是一个公共数据池,当你向这个数据池中发送数据,数据就变成公共数据了,任何节点都可以取出,且不可溯源。这个数据池,也可以认为是全球联通的一条数据总线。这是Metanet应用开发的一个基础。</p> <p>另外需要注意到的事情是,P2P节点网络是用于中继交易和区块的一种形式。但这并不是比特币网络的唯一形式,实际上,任何对于交易(Transaction)的承载,都是比特币网络的一部分。比特币是允许两个个体之间直接私下进行一系列TX交易而只把最终结果广播的,这被称为P2P交易。</p> <p>实际上不同的网络之间也可以私下处理交易,而把最终交易广播,我们把最强PoW保证的P2P节点网络认为是主网,主网里的数据是公共且不可篡改的。但是任何私下的网络都是不被禁止的,从比特币设计之初,不同网络的名称标识在比特币协议中就有专门的字段,意味着比特币(可以)是一个具有多个网络的系统。</p> <p>TX是一等公民,可以出入任何网络。PoW区块链网络只是作为主网,作为由算力保证的熵最低的网络,并作为最终TX有效无效的判断。而私下的PoS或其他的链或者局域网络,都可以根据需要接入到系统之中,只要你遵循同样的TX格式并共享同一套UTXO账本(可能会因为和主网冲突而被无效掉)。</p> <p>你可以任意创建你希望的新网络,来以你希望的形式来处理局部的TX交换。注意这不是分叉,因为PoW主网是最终仲裁,只要你遵守这一点,你就还在比特币的系统之中。</p> <p>理解这一点,你就理解了比特币网络是如何在星际空间中被使用的,不同的局域空间中可以拥有自己的网络。</p> <p>当然,甚至比特币的<code>主网</code>也是竞争产生的,未来PoW算力的竞争可能会在地球和火星两个网络之间发生,不过这就很远了。</p> <h4 id="OP-RETURN"><a href="#OP-RETURN" class="headerlink" title="OP_RETURN"></a>OP_RETURN</h4><p>OP_RETURN是一种特殊的输出,它是一个仅包含OP_RETURN和PUSH指令的脚本。我们用&lt;&gt;来表示push数据,那么OP_RETURN就是</p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">OP_RETURN &lt;Field1&gt; &lt;Field2&gt; ....</span><br></pre></td></tr></table></figure> <p>因此,我们可以很轻易地把一个数据结构</p> <figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line"> key1: value1,</span><br><span class="line"> key2: value2</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <p>双向映射到</p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">OP_RETURN &lt;value1&gt; &lt;value2&gt;</span><br></pre></td></tr></table></figure> <p>这实际上就是BitDB所作的事情之一</p> <p>所以,总结一下,通过OP_RETURN和P2P节点网络,我们得到了一个全球同步的公共数据库,这个公共数据库可以</p> <blockquote> <p>在任何位置访问,自带CDN</p> <p>任何人都可以付费写任何数据</p> <p>一旦写入不用担心被篡改</p> <p>几乎不存在宕机的可能性</p> <p>大约每10分钟备份一次</p> </blockquote> <h3 id="Metanet应用开发"><a href="#Metanet应用开发" class="headerlink" title="Metanet应用开发"></a>Metanet应用开发</h3><p>其实理解了上述内容,有些人就大概已经明白基于Metanet可以做哪些应用了。</p> <p>我们来简单定义一下Metanet应用,这个定义并不准确,因为比特币上一切都可能发生。</p> <h4 id="什么是Metanet应用?"><a href="#什么是Metanet应用?" class="headerlink" title="什么是Metanet应用?"></a>什么是Metanet应用?</h4><p>Metanet应用是接入到比特币系统中,以Transaction记录数据或逻辑的应用。</p> <p>它可以是个HTML应用,可以是个手机应用,可以是物联网设备中的应用,也可以是区块链游戏。</p> <p>它可能是有中心的,也可能是完全无服务器的。</p> <h4 id="为什么要做Metanet应用?"><a href="#为什么要做Metanet应用?" class="headerlink" title="为什么要做Metanet应用?"></a>为什么要做Metanet应用?</h4><p>Metanet应用减少了中间环节,把业务高度抽象。不需要部署CDN,全球可用,不同节点间随时保持同步。</p> <p>Metanet保证应用高度可用,即便服务器下线,也可以很轻易地异地重建(Planaria)。</p> <p>Metanet应用可以采用无服务端的架构,数据完全由用户产生,由用户使用,由用户管理,设计好协议和业务逻辑,就可以自组织地运行下去。</p> <p>Metanet应用可以以很低的成本维护,甚至于免维护。</p> <p>Metanet应用原生支持支付,信息易于转换成价值。</p> <p>这提供了理想的商业模式,使用即付费,一旦开发完成,相当于挖出了一条河道,持续赚钱。</p> <h4 id="什么应用适合做成Metanet应用?"><a href="#什么应用适合做成Metanet应用?" class="headerlink" title="什么应用适合做成Metanet应用?"></a>什么应用适合做成Metanet应用?</h4><p>信任类应用</p> <blockquote> <p>电子证据、票据、可审计的历史记录</p> </blockquote> <p>信息类应用</p> <blockquote> <p>内容分发、数据分享、数据产生与消费</p> </blockquote> <p>支付类应用</p> <blockquote> <p>数字内容销售、按次付费、全球支付</p> </blockquote> <p>分布式应用</p> <blockquote> <p>无服务器应用、自组织平台</p> </blockquote> <p>其他各种各样的应用</p> <h4 id="怎么做Metanet应用?"><a href="#怎么做Metanet应用?" class="headerlink" title="怎么做Metanet应用?"></a>怎么做Metanet应用?</h4><p>Metanet应用设计分三步:</p> <ol> <li>设计数据结构和协议</li> <li>设计UI</li> <li>将数据和UI对接起来</li> </ol> <p>每一步都可以很复杂也可以很简单,取决于你做什么样的应用,下面我们来一个个地实验。</p> <p>首先,第一个实验,关于内容上链,把HTML页面上链。</p> <blockquote> <p>新建一个HTML页面,或者把浏览器上一个页面另存为html文件</p> <p>在b.bitdb.network选择该html文件上传,使用moneybutton支付</p> <p>在b.bitdb.network页面上方会出现该文件,点击bico.media的连接</p> </blockquote> <p>然后,第二个实验,读取链上的数据。</p> <blockquote> <p>进入 <a href="https://bitgraph.network/explorer/ewogICJ2IjogMywKICAicSI6IHsKICAgICJmaW5kIjogeyJvdXQuaDEiOiI2ZDAyIn0sCiAgICAibGltaXQiOiAxMAogIH0KfQ==" target="_blank" rel="noopener">https://bitgraph.network/explorer/ewogICJ2IjogMywKICAicSI6IHsKICAgICJmaW5kIjogeyJvdXQuaDEiOiI2ZDAyIn0sCiAgICAibGltaXQiOiAxMAogIH0KfQ==</a></p> <p>6d02是发布memo的协议,memo协议在这里<a href="https://memo.cash/protocol" target="_blank" rel="noopener">https://memo.cash/protocol</a></p> <p>接下来,根据memo.cash的协议,查询memo的其他内容</p> </blockquote> <p>第三个实验,从HTML上查询memo内容。下载该HTML页面,观看查询结果,打开编辑器,编辑query刷新查看效果。</p> <p>第四个实验,数据对象的映射。打开该HTML页面,观察查询结果,编辑query以查询其他memo协议。</p> <p>第五个实验,使用BitSocket实时监听数据。</p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://genesis.bitdb.network/socket/1FnauZ9aUH2Bex6JzdcV4eNX7oLSSEbxtN/ew0KICAidiI6IDMsDQogICJxIjogew0KICAgICJmaW5kIjogeyAib3V0LmIwIjogeyAib3AiOiAxMDYgfSwgIm91dC5oMSI6ICI2ZDAyIiB9LA0KICAgICJwcm9qZWN0IjogeyAib3V0LiQiOiAxIH0NCiAgfSwNCiAgInIiOiB7DQogICAgImYiOiAiWyAuW10gfCB7bXNnOiAub3V0WzBdLnMyfSBdIg0KICB9DQp9</span><br></pre></td></tr></table></figure> <p>第六个实验,使用datapay发送数据。</p> <p>第七个实验,使用MoneyButton发送数据。</p> <h4 id="已经有了哪些Metanet应用和协议"><a href="#已经有了哪些Metanet应用和协议" class="headerlink" title="已经有了哪些Metanet应用和协议"></a>已经有了哪些Metanet应用和协议</h4><p><a href="https://github.com/monkeylord/awesome-bitcoin-sv" target="_blank" rel="noopener">https://github.com/monkeylord/awesome-bitcoin-sv</a></p> <h4 id="最后,别忘了安全性的考虑。"><a href="#最后,别忘了安全性的考虑。" class="headerlink" title="最后,别忘了安全性的考虑。"></a>最后,别忘了安全性的考虑。</h4> </div> <footer class="article-footer"> <a data-url="./2019/03/11/Metanet应用开发/" data-id="cjuhyngfg0004e4uf14hfe3ht" class="article-share-link">Share</a> </footer> </div> <nav id="article-nav"> <a href="../../19/How-to-Upload-Big-Files/" id="article-nav-newer" class="article-nav-link-wrap"> <strong class="article-nav-caption">Newer</strong> <div class="article-nav-title"> How to Upload Big Files </div> </a> <a href="../../04/The-Siteloader-is-Released/" id="article-nav-older" class="article-nav-link-wrap"> <strong class="article-nav-caption">Older</strong> <div class="article-nav-title">The Siteloader is Released.</div> </a> </nav> </article> </section> <aside id="sidebar"> <div class="widget-wrap"> <h3 class="widget-title">Archives</h3> <div class="widget"> <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="../../../../archives/2019/04/">April 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="../../../../archives/2019/03/">March 2019</a></li></ul> </div> </div> <div class="widget-wrap"> <h3 class="widget-title">Recent Posts</h3> <div class="widget"> <ul> <li> <a href="../../../04/14/Connecting-to-P2P-Network/">Connecting to P2P Network</a> </li> <li> <a href="../../20/How-to-Build-an-On-chain-Blog/">How to Build an On-chain Blog</a> </li> <li> <a href="../../19/How-to-Upload-Big-Files/">How to Upload Big Files</a> </li> <li> <a href>Metanet应用开发</a> </li> <li> <a href="../../04/The-Siteloader-is-Released/">The Siteloader is Released.</a> </li> </ul> </div> </div> </aside> </div> <footer id="footer"> <div class="outer"> <div id="footer-info" class="inner"> &copy; 2019 Monkeylord<br> Powered by <a href="http://hexo.io/" target="_blank">Hexo</a> </div> </div> </footer> </div> <nav id="mobile-nav"> <a href="../../../../index.html" class="mobile-nav-link">Home</a> <a href="../../../../archives/" class="mobile-nav-link">Archives</a> </nav> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <link rel="stylesheet" href="../../../../fancybox/jquery.fancybox.css"> <script src="../../../../fancybox/jquery.fancybox.pack.js"></script> <script src="../../../../js/script.js"></script> </div> </body> </html> text/htmlbinary 7324ad723b0825d5b32792816e4e33ce
    https://whatsonchain.com/tx/dd84a84c053a98c025ff882131a6b2d1a0389770940d9a2421e28ff9e9b670de