当前位置:首页 » 区块链 » 正文

希腊神话-卡俄斯智能合约的安全性如何考证,技术大神解读

    在开始之前,要先了解智能合约的地址是怎么产生的,大家都知钱包地址是通过助记词生成私钥,然后通过私钥生成地址的,每个钱包地址都有一个唯一对应的私钥,这个私钥可以操控这个地址里面所有的资产。那么智能合约的地址是怎么产生的呢:

智能合约地址的生成逻辑

合约地址是根据创建者(sender)的地址以及创建者发送过的交易数量(nonce)来计算确定的。 sender 和 nonce 进行 RLP 编码,然后用 Keccak-256 进行 hash 计算。

def mk_contract_address(sender, nonce):   
return sha3(rlp.encode([normalize_address(sender), nonce]))[12:]

使用 Solidity 代码

//  nonce 为 0 时生成的地址
nonce0 = address(keccak256(0xd6, 0x94, address, 0x80))
nonce1 = address(keccak256(0xd6, 0x94, address, 0x01))

通过上面的逻辑,我们知道了【智能合约的地址并不是通过私钥来生成的】,也就是说这个地址的私钥即使对于合约的创建者都没有办法知道,因为我们没有办法通过地址反向推导出私钥。

用户和智能合约交互

那么用户怎么和智能合约进行交互呢?看下图:

首先智能合约就是一段预先编写好的程序,部署在区块链上。虽然我们没有私钥去直接操作合约地址里面的资产,但是可以通过合约程序定义的方法和合约进行互动,以【卡俄斯Chaos】智能合约为例,最核心的有三个方法:

兑换母币:

张三通过往智能合约地址转入TRX,智能合约通过预先制定的兑换比例返还一定数量的母币给她,此时智能合约地址里面就有了TRX资产,但是没有任何人能直接将TRX资产通过私钥转移走,因为压根儿就没有私钥。

质押挖矿:

李四用他兑换来的母币质押进智能合约,一定时间过后,智能合约根据预先制定的规则就会挖出一定数量的子币发送给李四,任何人没有办法直接获取到子币,当然收到的子币可以到二级市场自由买卖。

兑现子币:

王五将自己挖到的子币发送到智能合约,智能合约根据预先定义的规则按照一定比例,将对应的TRX资产发送给王五。智能合约地址里面的TRX资产除了这一种方法外,没有其他任何途径将TRX资产拿走。

如果保证智能合约里面资金的安全

上面我们讲到了,用户如何和智能合约交互,也就是用户调用智能合约的方法,从而实现TRX资金的进出。那么有人会问,合约的创建者预先留一个套取TRX资金的合约方法,不就可以随意拿取合约地址里面的TRX资金了?事实上,是完全可以的。那么怎么保障所有参与智能合约者的利益呢?答案就是下面两个途径:

智能合约代码审计

通过专业的第三方合约审计机构,进行代码审计:

  • 确保合约没有留后门;

  • 确保项目逻辑和源码一致;

  • 确保没有安全漏洞,防范黑客攻击;

  • 通过三方审计平台查询审计报告的详细内容;

智能合约代码公开

在官方区块链浏览器上完全公开智能合约的代码:

  • 确保项目宣传和代码逻辑一致;

  • 确保智能合约代码人人可见,人人可以审计,没有留后门,没有安全漏洞。如果不信任三方审计的人,可以根据完全公开的源码自己找值得信任的人或任何机构再次进行合约代码审计;

以下就是【卡俄斯Chaos】智能合约在官方区块浏览器源码验证通过的截图,确保源码和正在运行的智能合约完全匹配。

智能合约在波场的完全代码认证能过,合约是否完全开源就看是否有绿色

没有就是假开源,同时,是所有业务逻辑源码公开,还是只公开标准代币源码,区别也很大

希腊神话-卡俄斯智能合约的安全性如何考证,技术大神解读:等您坐沙发呢!

发表评论


亲,不支持纯字母、符号评论哦~