<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>WeiXuefeng Doc Blog</title>
        <link>https://doc.newb.club/blog</link>
        <description>WeiXuefeng Doc Blog</description>
        <lastBuildDate>Fri, 28 Apr 2023 06:30:46 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <item>
            <title><![CDATA[andverse]]></title>
            <link>https://doc.newb.club/blog/andverse</link>
            <guid>andverse</guid>
            <pubDate>Fri, 28 Apr 2023 06:30:46 GMT</pubDate>
            <description><![CDATA[[!TOC]]]></description>
            <content:encoded><![CDATA[<p>[!TOC]</p><h1>State of metaverse</h1><p>decentraland 状态</p><h2>1. ownership layer, 所有权层</h2><h3>Land 智能合约</h3><p>Land eth 地址:<code>0xF87E31492Faf9A91B02Ee0dEAAd50d51d56D5d4d</code>, 遵循 ERC721 标准，每个 parcel 包括:</p><pre><code>owner: 对该 Land 有绝对控制权
approval: 授权一个地址权限，可以转让和修改数据
updateOperator: 可以修改NFT数据 
assetData: 与地块有关的额外信息
</code></pre><p>还有:</p><pre><code>operator:address允许转移任何代币
ping:address与此合约最后一次交互的 UNIX 时间戳（以秒为单位）
</code></pre><h3>Estate 合约，地产合约</h3><p>地产合约，可组合的不可替代合约。将许多 LAND 放到一起，目的：用户在转让，出售，管理土地的时候可以节省 GAS。</p><h3>去中心化交易市场</h3><p>市场合约：<code>0x8e5660b4ab70168b5a6feea0e0315cb49c8cd539</code>
出价合约: <code>0xe479dfd9664c693b2e2992300930b00bfde08233</code>
设计目的: </p><ol><li>使用 MANA 安全的，无需信任的交易地块</li><li>交易可能在不依赖矿工以外的第三方的情况下发生。</li><li>合约不收取任何费用，如果有收取费用，那么就需要销毁 MANA</li><li>作为以太坊公民，合约应该准备好租用存储空间，而不是浪费存储空间</li></ol><h3>其他合约</h3><ol><li>燃烧合约：销毁接受到的 ERC20 Token</li><li>拍卖合约：用户 LAND 的第二次拍卖</li><li>Passthough: 可以将某些函数加入黑名单，安全防护</li><li>Vesting：根据时间释放 token合约</li></ol><h2>2. 分发和验证内容</h2><ol><li>每个 NFT 需要有 <code>URL</code> 和 <code>CID</code>,根据这些从 IPFS 下载内容以便渲染到场景中；</li><li>用户代理(浏览器)连接到内容服务，下载所需要的内容副本</li></ol><p>分发逻辑:</p><ol><li>判断地块有没有 <code>CID</code> 信息</li><li>? 判断该地块有没有其他签名信息</li></ol><p>验证逻辑:</p><ul><li>包裹信息中包括清单文件、签名信息(spec256k1)</li></ul><ol><li>地址是否是地块的 owner</li><li>该地址是否是地块的 operator</li><li>地块是否是地产的一部分</li><li>地址是否是地产的 owner</li><li>地址是否是地产的 operator</li></ol><h3><a href="https://github.com/decentraland/content-service">Decentraland&#x27;s IPFS Content Server HTTP API</a></h3><h2>3. 加载周边包裹算法:</h2><p>全局状态包括:</p><ul><li>position: 玩家位置</li><li>LoadedScenes: 已经加载的场景集合 或者 loading</li><li>WorldMapper: 将 LAND 坐标映射到收到的最新且有效的场景清单的服务。它还避免了重叠/错误部署的场景。</li></ul><p>算法分三步:</p><ol><li><p>拉取并调节场景信息，然后加载</p><ul><li>令 <code>Coordinates</code> 为距位置可见半径内所有地块的坐标集</li><li>令 <code>ScenesToLoad</code> 成为一组空的场景</li><li>对于坐标中的每个 <code>C</code> <ul><li>设场景清单 <code>S</code> 为 <code>WorldMapper.scene(C)</code> </li><li>将 <code>S</code> 添加到 <code>ScenesToLoad</code></li></ul></li></ul></li><li><p>Select which scenes should be loaded:</p></li></ol><pre><code>For every S in ScenesToLoad
    If S ∉ LoadedScenes:
    Load scene S
    Add S to LoadedScenes
</code></pre><ol start="3"><li>Load and unload scenes</li></ol><pre><code>For every S in LoadedScenes
    If S ∉ ScenesToLoad
    Unload scene S
    Remove S from LoadedScenes
</code></pre><h2>4. 包裹清单</h2><p>每个场景都需要许多配置参数和输入信息，以便用户代理可以正确显示场景并连接到其他客户端。这些字段包括其他所需材料（模型、脚本、纹理、声音……）的 IPFS CID 以及客户端应该如何渲染和行为的策略（是否允许飞行，客户端可能出现的安全传送区域是什么，使用哪个通信服务器与他人通信......）</p><p>eg:</p><pre><code class="language-json">{
  &quot;assets&quot;: {
    &quot;scene.js&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;material_wood&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;material_iron&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;door_model&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;favicon_asset&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;background_music&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;snapshot&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;,
    &quot;lod50&quot;: &quot;/ipfs/QmZ1d5v83XSM7xbKDVAdFgS1PZmCzxuF5UtYrjMtFt6d6b&quot;
  },

  &quot;contact&quot;: {
    &quot;name&quot;: &quot;John Doe&quot;,
    &quot;email&quot;: &quot;john@doe.com&quot;
  },

  &quot;main&quot;: &quot;scene.js&quot;,

  &quot;scene&quot;: {
    &quot;base&quot;: &quot;2,2&quot;,
    &quot;parcels&quot;: [
      &quot;1,2&quot;, &quot;1,3&quot;, &quot;1,4&quot;,
      &quot;2,2&quot;, &quot;2,3&quot;, &quot;2,4&quot;,
      &quot;3,2&quot;, &quot;3,3&quot;, &quot;3,4&quot;
    ]
  },

  &quot;communications&quot;: {
    &quot;type&quot;: &quot;commsv2&quot;,
    &quot;server&quot;: &quot;https://comms.decentraland.org&quot;
  },

  &quot;spawnPoints&quot;: [
    {
      &quot;position&quot;: {
        &quot;x&quot;: 1.3, &quot;y&quot;: 1.4, &quot;z&quot;: 18.34
      },
      &quot;rotation&quot;: {
        &quot;x&quot;: 0, &quot;y&quot;: 180, &quot;z&quot;: 0
      },
      &quot;default&quot;: true
    },
    {
      &quot;area&quot;: {
        &quot;x&quot;: [1.3, 2.5],
        &quot;y&quot;: [0, 0],
        &quot;z&quot;: [20, 20]
      }
    }
  ],

  &quot;policy&quot;: {
    &quot;contentRating&quot;: &quot;E&quot;,
    &quot;fly&quot;: &quot;yes&quot;,
    &quot;voiceEnabled&quot;: &quot;yes&quot;,
    &quot;blacklist&quot;: [&quot;0,0&quot;, &quot;1,0&quot;, &quot;1,1&quot;, &quot;1,1&quot;],
  },

  &quot;tags&quot;: [&quot;land&quot;, &quot;decentraland&quot;, &quot;parcel&quot;],

  &quot;display&quot;: {
    &quot;title&quot;: &quot;My Land&quot;,
    &quot;favicon&quot;: &quot;favicon_asset&quot;,
    &quot;preview&quot;: {
      &quot;snapshot&quot;: &quot;snapshot&quot;,
      &quot;loadingColor&quot;: &quot;#15ffae&quot;,
      &quot;lod50&quot;: &quot;lowres&quot;
    }
  }
}

</code></pre><h2>5. Scripting Scenes, 脚本场景</h2><p>包裹清单文件包括一个名为 <code>main</code>的字段，它应该指向一个由每个用户代理同时执行的 javascript 文件。</p><pre><code class="language-javascript">// Create a group to track all entities with a Transform component
const myGroup = engine.getComponentGroup(Transform)

// Define a System
export class RotatorSystem implements ISystem {
  // The update function runs on every frame of the game loop
  update() {
    // The function iterates over all the entities in myGroup
    for (let entity of myGroup.entities) {
      const transform = entity.get(Transform)
      transform.rotate(Vector3.Left(), 0.1)
    }
  }
}

// Add the system to the engine
engine.addSystem(new RotatorSystem())

// Create an entity
const cube = new Entity()

// Give the entity a transform component
cube.add(new Transform({
    position: new Vector3(5, 1, 5)
  }))

// Give the entity a box shape
cube.add(new BoxShape())

// Add the entity to the engine
engine.addEntity(cube)

</code></pre><h2>6. Supporting dApps &amp; Tooling</h2><ul><li><p><a href="https://marketplace.decentraland.org">Marketplace</a>
<a href="https://github.com/decentraland/marketplace">github</a></p></li><li><p><a href="https://agora.decentraland.org">Agora</a> 链下投票
Agora is an off-chain voting tool that can be used with any ERC-20 token that has been used to poll the community on different high-impact decisions for the protocol.</p></li><li><p><a href="https://builder.decentraland.org">Builder</a>
builder 是一个易于使用的点击式装饰工具，它允许任何人快速构建场景、创建稍后可以用代码修改的布局，以及通过与他人共享项目进行协作。</p></li><li><p><a href="https://github.com/decentraland/cli">命令行界面</a>
该cli用于Decentraland允许开发人员创建的场景，查询blockchain对不同土地的当前状态，并部署到内容服务器。</p></li><li><p><a href="https://ui.decentraland.org">decentraland-ui</a> 和 <a href="https://github.com/decentraland/decentraland-dapps">decentraland-dapps</a></p></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Welcome]]></title>
            <link>https://doc.newb.club/blog/welcome</link>
            <guid>welcome</guid>
            <pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Docusaurus blogging features are powered by the blog plugin.]]></description>
            <content:encoded><![CDATA[<p><a href="https://docusaurus.io/docs/blog">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog">blog plugin</a>.</p><p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p><p>Regular blog authors can be added to <code>authors.yml</code>.</p><p>The blog post date can be extracted from filenames, such as:</p><ul><li><code>2019-05-30-welcome.md</code></li><li><code>2019-05-30-welcome/index.md</code></li></ul><p>A blog post folder can be convenient to co-locate blog post images:</p><p><img src="./docusaurus-plushie-banner.jpeg" alt="Docusaurus Plushie"/></p><p>The blog supports tags as well!</p><p><strong>And if you don&#x27;t want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MDX Blog Post]]></title>
            <link>https://doc.newb.club/blog/mdx-blog-post</link>
            <guid>mdx-blog-post</guid>
            <pubDate>Sun, 01 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Blog posts support Docusaurus Markdown features, such as MDX.]]></description>
            <content:encoded><![CDATA[<p>Blog posts support <a href="https://docusaurus.io/docs/markdown-features">Docusaurus Markdown features</a>, such as <a href="https://mdxjs.com/">MDX</a>.</p><p>:::tip</p><p>Use the power of React to create interactive blog posts.</p><pre><code class="language-js">&lt;button onClick={() =&gt; alert(&#x27;button clicked!&#x27;)}&gt;Click me!&lt;/button&gt;
</code></pre><button>Click me!</button><p>:::</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Long Blog Post]]></title>
            <link>https://doc.newb.club/blog/long-blog-post</link>
            <guid>long-blog-post</guid>
            <pubDate>Wed, 29 May 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[This is the summary of a very long blog post,]]></description>
            <content:encoded><![CDATA[<p>This is the summary of a very long blog post,</p><p>Use a <code>&lt;!--</code> <code>truncate</code> <code>--&gt;</code> comment to limit blog post size in the list view.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[First Blog Post]]></title>
            <link>https://doc.newb.club/blog/first-blog-post</link>
            <guid>first-blog-post</guid>
            <pubDate>Tue, 28 May 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet]]></description>
            <content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p>]]></content:encoded>
        </item>
    </channel>
</rss>