# 赏善罚恶令

By [太乙协议](https://paragraph.com/@taiyidao) · 2022-12-16

---

　　在[太乙协议](https://github.com/TaiSifu/TaiyiProtocol/tree/main/packages/taiyi-contracts)中，有一个很重要的合约，用于太乙岛治理提案的执行，这个合约称作是“[赏善罚恶令](https://github.com/TaiSifu/TaiyiProtocol/blob/main/packages/taiyi-contracts/contracts/governance/TaiyiDAOExecutor.sol)”。

　　准确地说，这个合约（`TaiyiDAOExecutor`）是一个由太乙师傅共同参加的投票执行系统，可以在链上执行太乙岛提案，这些提案几乎支持一切链上交易。这个合约衍生自Compound项目的`Timelock`，它也为太乙岛运作了一个带时间锁定的金库系统，同时它也是太乙岛提案的实际执行者，因此又被称为“`赏善罚恶令`”。

　　这个合约只能由太乙岛治理合约（`TaiyiDAOProxy`）来控制，因此只能执行太乙岛治理合约通过的`提案`。这些提案从给某个社区工作者发工资，到操作盘古角色印制“[道理](https://github.com/TaiSifu/TaiyiProtocol/blob/main/packages/taiyi-contracts/contracts/world/AssetDaoli.sol)”，甚至是替换升级某个重要的合约模块，可以说是五花八门，应有尽有。

　　这里举个投资的例子，如果师傅们希望外界的加密货币注资到太乙岛基金会，怎么操作赏善罚恶令？

　　首先，太乙岛相关的协议本身是和现有的加密货币无关的，只定义了一种叫做“道理”的ERC20通货。太乙协议的角色合约中，每次铸造新角色的道理费用，是直接由铸造代码打入到太乙岛基金会地址的。另外太乙世界中的一些事件，也会给太乙基金会打入一些资源资产，比如金石、药材等等，作为太乙世界的建设基金。甚至，有一些特殊的资源，比如“[师傅令牌](https://github.com/TaiSifu/TaiyiProtocol/blob/main/packages/taiyi-contracts/contracts/SifusToken.sol)”，每铸造十个，就会自动铸造一个直接打入到太乙岛基金会的地址。由于师傅令牌就是太乙岛治理的投票权，因此太乙岛基金会至少会获得10%的投票权。

　　回到我们的主题上，如果有一个投资机构，想用以太坊投资太乙基金会并获得相应数量的师傅令牌。那么就可以由当前的某位师傅在太乙岛治理合约上发起一个`提案`。

　　提案中包含如下两个需要执行的交易（Transaction）： 　　- 1、在包装ETH的ERC20代币（如WETH）合约上，从投资人地址转账到太乙岛基金会地址 　　- 2、在[师傅令牌合约](https://github.com/TaiSifu/TaiyiProtocol/blob/main/packages/taiyi-contracts/contracts/SifusToken.sol)上，从太乙岛基金会地址将N个太乙师傅令牌转给投资人地址

　　接下来，由各位师傅检查这个提案的内容，如果表示满意，就投票通过这个提案。

　　保险起见，提案被通过并进入治理合约的执行队列后，治理合约还会等上一段时间来交给赏善罚恶令去执行。这段时间，投资人和基金会双方可以检查提案的状态，在确认为“待执行”状态后，双方才会对赏善罚恶令合约进行最后的代币操作授权。只有授权后，赏善罚恶令也才能成功执行上述两个交易。

　　在提案被执行后，上述两笔交易就会被一次性执行完毕。只要有其中一笔交易失败，提案所有的相关交易都会无效（revert）。提案正确执行后，太乙岛基金会应该就收到了投资人的ETH包装代币，投资人也收到了基金会转过来的师傅令牌。

![赏善罚恶](https://storage.googleapis.com/papyrus_images/998cbbed6a69b71de75138e6117892132ead85a52da7f7f9f51d29025b75f190.png)

赏善罚恶

---

*Originally published on [太乙协议](https://paragraph.com/@taiyidao/xxm4ATu8gWqfUqGZyGYN)*
