# Dyson快速撸毛教程

By [Constantine](https://paragraph.com/@0xnan) · 2022-09-16

---

直达相关链接
------

要详细做的朋友直接看下面的链接一步步跟着做。推特thread里是最基础的几步，截图和描述性的文字比较多，但操作其实很简单。按官方的说法这里是前3部分

[https://twitter.com/Abrahamchase09/status/1570723379501735937](https://twitter.com/Abrahamchase09/status/1570723379501735937)

第4部分

[https://medium.com/@dysonprotocol/how-to-read-from-storage-and-render-a-website-on-the-dyson-protocol-part-4-of-4-9f3e0d62f04c](https://medium.com/@dysonprotocol/how-to-read-from-storage-and-render-a-website-on-the-dyson-protocol-part-4-of-4-9f3e0d62f04c)

第5部分

[https://medium.com/@dysonprotocol/how-to-change-the-look-of-your-website-using-html-and-css-on-the-dyson-protocol-part-5-ab15260cec7a](https://medium.com/@dysonprotocol/how-to-change-the-look-of-your-website-using-html-and-css-on-the-dyson-protocol-part-5-ab15260cec7a)

目前只出了5部分，看第5部分结尾好像还有后续。

干货部分
----

这里我把重点的几步直接一次性做完，想干1000个号的朋友可以上。

关注下官方推特:[https://twitter.com/DysonProtocol](https://twitter.com/DysonProtocol)

加入官方discord:[https://discord.gg/6sCCtDaH](https://discord.gg/6sCCtDaH)

准备keplr钱包，就是ATOM（阿童木）的钱包，这里不详细描述下载和安装。

登录：[https://dys.dysonvalidator.com/](https://dys.dysonvalidator.com/) 后，keplr会弹出添加测试网络和允许访问的请求，approve即可。将keplr网络切到Dyson,复制钱包地址,类似 dys\*\*\*\*\* 。

到discord的test-airdrop频道提交钱包地址领水，等待5-30分钟不等，看管理员心情。

测试开始
----

如果因为测试页面比较卡，手动做了刷新页面的操作，记得查看下右上角钱包有个锁的标记是不是锁了，点一下即可，再继续进行测试。

### 数据写入

1.     左侧选择 **Tx Builder** , 选择 Dyson/sendMsgCreateStorage，可以看到下面有4个选框，分部选中，creator填自己的dyson地址；index填地址加斜杆加一个英文名（可随便取，但要记住，后面要用）；datau部分随便写点内容即可，不重要；force选false。然后，拉到上面，点击“Sign Transaction”, 成功之后最下面会跳出一些返回信息（见本节最后一张图）。

![](https://storage.googleapis.com/papyrus_images/ee9c0035e4e6a4b2b0e45775ee9ec1ad646b674d3a9ebbdcf965b95e52fdb093.png)

![](https://storage.googleapis.com/papyrus_images/ee9c0035e4e6a4b2b0e45775ee9ec1ad646b674d3a9ebbdcf965b95e52fdb093.png)

![](https://storage.googleapis.com/papyrus_images/4ae99af5f83490f7750054429bd51481c5a8ab4dfd3a46876027dc7571faa7da.png)

2.     到上面的下拉框选择 **Dyson/QueryStorage** ，勾选index，填入上一步index中相同的内容（地址/你的英文名），然后点击 Run Query。会反馈你上一步写入的数据内容（见本节第2张图下面部分）。

![](https://storage.googleapis.com/papyrus_images/2ece409cf5d2ef2f9de36782ccd10597a49d5694e592b4b81a929583dda4a056.png)

![](https://storage.googleapis.com/papyrus_images/d68f6d9318f0def4ea2a3e529494ca80fd0a05e865153e1cbf4e23fe46b3276d.png)

3.     中间keplr钱包跳出确认的，点击同意（approve）即可。如果操作过程中页面长时间没有响应的，可以刷新页面，记得右上角解锁钱包。好了，如果上面2步执行没有问题。那我们的钱包和英文数据就写入系统成功了。

### 代码

4.     页面左侧选择 **Your Script** , 在右侧复制如下代码：

    import html
    from string import Template
    from dys import _chain, get_script_address, get_caller
    
    
    def say_hello(my_name: str):
        assert get_script_address() == get_caller(), "permission denied"
        data = "hello " + my_name
        print(data)  # to help debug
        return _chain(
            "dyson/sendMsgCreateStorage",
            creator=get_script_address(),
            index=get_script_address() + "/Constantine",
            data=data,
            force=True,
        )
    
    
    def get_greeting():
        pass
        return _chain(
            "dyson/QueryStorage",
            index=get_script_address() + "/Constantine",
        )
    
    
    def render_page(body: str):
        return Template(
            """<!doctype html>
        <html>
            <head>
                <title>Hello World</title>
                <meta charset=utf-8>
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
                <style>
                    .heading {
                        text-shadow: #FC0 1px 0 10px;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <h1 class="heading">Greeting!</h1>
                    <p>$body</p>
                </div>
            </body>
        </html>
        """
        ).safe_substitute(body=body)
    
    
    def application(environ, start_response):
        start_response("200 ok", [("Content-type", "text/html")])
        greeting_data = get_greeting()["result"]["storage"]["data"]
        return [
            render_page(html.escape(greeting_data)).encode(),
        ]
    

代码中将其中2处”Constantine”替换为自己的英文名，然后点击 “**save**” ，弹框确认， 稍微等一会，等页面最下方出现一些返回信息，基本可以判断为成功。

5.     浏览器新开窗口，打开[https://dys1v45kjm2kuk6dju\*\*\*\*\*\*\*\*\*\*\*\*xw8ya.dysonvalidator.com/](https://dys1v45kjm2kuk6djuyth0cunffhkntdj7myvxw8ya.dysonvalidator.com/) ，将dys1v45kjm2kuk6dju\*\*\*\*\*\*\*\*\*\*\*\*xw8ya这一段替换为自己的dyson地址，即可得到类似如下页面。

![](https://storage.googleapis.com/papyrus_images/464488acadcf3c9f5b50bdb98b2ec8e7953b55e6f5a017a5a8d15d23f48104e3.png)

结束
--

好了，至此官方文档中想呈现的结果我们已经做完了。想要详细了解具体原理的朋友请参照文章开头**相关链接**的步骤，一步步自己跟着做即可。看官方medium第5部分的最后还提到了后面会新出的关于编程循环部分的新内容，有兴趣的可以自己继续关注。

最后，可以关注我的twitter: [https://twitter.com/Constantine\_He](https://twitter.com/Constantine_He)

---

*Originally published on [Constantine](https://paragraph.com/@0xnan/dyson)*
