# Tally——链上治理龙头项目使用（空投）指南

By [ChiefDavid](https://paragraph.com/@chiefdavid) · 2022-09-04

---

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

**_简介_**：_Tally融资600万，是链上治理工具中的龙头，但是使用Tally需要一定的合约开发知识，所以劝退了很多人。本教程应该可以帮助所有人在一小时内零基础完成智能合约开发和链上治理的教程。Tally也许有空投，也许没有；其他项目也许会对DAO有空投，也许也没有；不过在撸空投的过程中学会了部署合约，至少我个人是感到很有趣的。_

### 正文开始：

许多人只识Snapshot不识Tally，其实Tally是链上治理（投票）工具中的龙头项目，将来很多项目也很有可能对Tally上的DAO进行空投。

![Compound、Uniswap等重要的DEFI基础设施和DAO都在这里部署了投票](https://storage.googleapis.com/papyrus_images/f5af4e200ed33c9cccc81eb7f97cac68f684b3eb3183e6fd544552ea822fd3ca.png)

Compound、Uniswap等重要的DEFI基础设施和DAO都在这里部署了投票

与自己去参与投票获得空投权重不同，本攻略作为上篇DAO治理的延续，核心是用最简单的方法，教大家一人成DAO，部署投票合约。

这里做个小提醒，Tally和Tally Ho是两个不同的项目，Tally是链上治理工具，网址:Tally.xyz；Tally Ho是一个智能合约钱包，网址：Tally.cash。

一、认识链上投票
--------

与Snapshot这种链下投票不同的是，链上投票不仅需要使用自己的代币进行投票，而且投票结束后可以立即执行设置好的智能合约，可以说是更加严肃和有共识的Web3治理方式。

![链上投票流程](https://storage.googleapis.com/papyrus_images/6bd83ee1b005e7aeda945cb8fcfc9f643e12389f385afc9391edbd3056788de5.png)

链上投票流程

链上投票流程

既然链上投票可以执行合约，必然要部署合约，而不是像Snapshot那样简单创建投票就可以了。但是不用担心，借助一些工具，大家可以轻松地零基础部署合约（而且很好玩），下面进入正题。

二、部署合约
------

Tally的投票分为两个智能合约：代币合约和治理合约。有了这两者，再加上一个多签钱包，就可以部署投票了。

_警告：部署合约需要花费大量Gas，建议先在goerli测试网（tally只支持goerli测试网）或Polygon（本文在polygon上创建）部署，运行无误后再等gas低的时候部署到ETH主网上（主网上获得空投的可能性更大）。_

### 1、发币

首先打开OpenZepplin Contracts Wizard，这是一个快熟部署合约的工具，可以运行OpenZepplin中的大多数已经经过审阅的安全合约。

[

OpenZeppelin Contracts Wizard
-----------------------------

An interactive smart contract generator based on OpenZeppelin Contracts.

https://wizard.openzeppelin.com

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

](https://wizard.openzeppelin.com/)

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

如图所示，我们现在上方选择ERC20，也就是普通的Token，**然后选中图中打钩和选中的选项**，可以看到一段代码已经直接被调用出来了。

其中Name就是Token名字，Symbol是Token简称，Premint是指部署合约的时候往地址里面放多少个币，这些都可以随意填写。

完成以上步骤之后，点击右上角的Open in Remix，即可打开以太坊官方开发的开发环境。

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

进入以后等待片刻会出现上图的界面，点击左侧的文件，即可打开刚才我们“写”下的代码（注：如果网络顺畅，有可能直接打开文件，见下图）

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

**进入以后点击“advanced Configuration”**。把下面的”enable optimization”勾上，这个选项可以优化、缩短代码。

**然后点击下面的Compile Contract**。即把代码编译成机器能读懂的语言，编译结束后，可以在左侧看到一个小勾，然后点击小勾下面的图标。

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

进入下图界面后，**在左边的红框处选择”injected provider -metamask”**，也就是小狐狸钱包，钱包里选择的网络即是你的合约部署所在的网络（测试网只能选择polygon），**在下面红框处选择自己正在编辑的文件，并在下面的Deply with proxy上打钩**；**最后点击deploy**，会弹出一个提示框，告诉你正在部署两个文件，按下proceed继续。

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

随后会弹出交易窗口，**如果是部署在polygon上，需要在推荐站点处选择gas使用**（中、高都可以），否则会运行失败；Goerli上则没有这个麻烦。

第一个钱包部署完成后会弹出提示框，点击ok继续，会再次生成一个合约。

### 恭喜你，你已经在链上发了第一个属于自己的币，而且这个币是可更改、升级的。

接下来我们打开区块链浏览器。

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

打开小狐狸钱包，点击三个点，点击红框。

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

在下面的交易记录中点击第一条交易记录的Txn Hash。

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

在记事本中复制黏贴记下区块（Block）中的数字，以及合约代码（0x的那一段）。

至此，发币部分完成。

借助各种工具，发币是不是没有想象中那么难^\_^

### 2.部署治理合约

我们如法炮制，回到Openzeppelin的代码工具中。

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

左上角选择governer，即治理合约，name随意取，voting delay是指在多少个区块（block）后开始投票，voting period是指投票时长。**需要注意的是，这里的投票时长只是根据区块时间做的预估，为了方便测试我们下面的投票，在polygon上需要把小红框中的“136”改为600（即运行600个区块后结束，大约20分钟），在goerli上需要把数字改为100（也是20分钟）。**

proposal threshold是指需要多少个代币才能开启投票，quorum是通过投票的百分比，**timelock是时间锁，一定要关掉**，否则部署难度会提升很多，其他的暂时都不用管，都用不着。然后继续“open in remix”。

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

接下来还是跟前面一样的设置，然后compile。再点击到左侧第二个图标。

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

这里的设置基本还是跟前面一样，不过需要在deploy右侧输入刚才我们部署的token地址，把Token绑定到治理合约上。

然后点击Deploy，部署合约后打开区块链浏览器。步骤与发币是一样的，打开第一个Tx hash。

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

记录下block数字和合约地址。

### 恭喜你完成了治理合约的部署！最难的两个部分已经完成了！你已经打败了99.5%的链上玩家。

三、在Tally上创建DAO并投票
-----------------

我们打开Tally。

[

Tally - Institutional-grade tokens
----------------------------------

Best-in-class infrastructure for the world's most valuable networks.

https://www.tally.xyz

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

](https://www.tally.xyz/)

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

连上自己的钱包，点击Start a DAO，然后输入信息。

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

点击edit填写基本档案，这里难度不大，就不详述了；接下来需要连接一个Gnosis Safe多签地址，如果没有多签，直接创建一个就行了，多签是DAO必备的钱包。

最后点击link governor按钮，绑定我们之前部署的两个合约。

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

此处输入我们之前部署的**治理合约**地址，然后点击set governor contract。

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

完成绑定后会直接进入管理投票界面。

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

首先点击Delegate Vote，选择delegate to self，由自己管理自己的投票权。

然后点击小红框处的箭头，我们可以看到treasury（国库）的地址就是刚才创建的治理合约地址，随意转一些matic（polygon）或eth（goerli）过去，方便我们接下来的治理。

**需要注意的是，tally的前端与区块链的连接有一些延迟，所以不管是现在代理投票权还是接下来的投票，都会出现进行了交互，但是网页上还会提示一些小错误的情况，不用太在意这些小问题。**

最后点击create new proposal，创建投票。

第一步和第二步填写信息没什么好说的，直接跳过。

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

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

第三步我们选择transfer tokens，即通过国库转账，如果你会部署其他合约，也可以选择custom action。

然后选择一个钱包地址，输入金额，进入下一步预览一下我们的投票，点submit on-chain后在钱包签名，继续到下一步。

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

返回到投票管理界面，可以看到我们的投票还在草稿中，这是因为之前提到的网页和区块链没有同步的原因造成的，等待7-9分钟后，投票会在propasals栏中显示。注意，因为之前我们在合约中的设置，本次投票只有20分钟的时间，现在已经过了10分钟，所以得尽快完成投票。

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

点击vote后选择for，然后在钱包签名。

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

在左上角点击自己dao的名称，回到投票界面。

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

提案结束后，会excute按钮会点亮，点击后完成最后一步执行方案，整个投票流程就结束了。

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

打开区块链浏览器，我们在链上留下了一大堆交互记录。如果tally有空投的话，这些记录将会成为我们领取空投的“凭证”。

---

*Originally published on [ChiefDavid](https://paragraph.com/@chiefdavid/tally)*
