usdt合约分析(以太坊主链) - 2023-02-18

注:

仅作技术交流,禁止商用

如有侵权,请联系删除

以太坊主链-稳定币合约对比(busd, usdc, dai, luna, ust)



usdt合约简介


usdt 合约架构

合约描述

    地址:0xdac17f958d2ee523a2206206994597c13d831ec7

    基于erc20实现,拥有黑名单,暂停管理,便捷更新等功能

    通过Tether公司中心化运营来保证对美元的锚定

    通过把owner地址设置为  多签合约  实现一定的安全性

主体合约结构

    TetherToken(solidity ^0.4.17)

核心合约结构

    ownable —— 代币管理员合约

    erc20basic + erc20 —— erc20提案的3大接口

    pausable —— 代币暂停合约

    blackList —— 黑名单管理合约

    safeMath —— 数学安全计算库

    upgradeStandardToken —— 代币扩展接口

usdt合约重点功能实现 —— erc20协议实现


usdt合约 - erc20实现

说明:usdt将erc20的接口拆分为2个分别实现,允许未来切换到其他合约实现而不用大改当前合约

合约接口:erc20basic和erc20

实现:

    1 合约BasicToken实现了erc20basic合约,有了基础的货币交易功能

        实现了transfer接口,代币供应量,代币余额查询管理等

        并且做了短地址攻击的防御应对

    2 合约StandardToken实现了erc20合约,有了授权交易的功能

        实现了transferFrom, approve接口,交易利率, 授权额度管理等

特点:

    1 安全性:如溢出处理,owner校验,短地址攻击的防御,先减再加

    2 approve接口避免交易竞争:不允许在有额度场景下设置其他非0值(busd等稳定币合约无此要求)

    3 usdt对于erc20协议的实现并不标准(核心接口没返回state)

合约重点功能实现 —— 代币管理权限及转移

ownable合约实现

说明:usdt实现了一个ownable接口用于进行合约的管理,进行一些简单的接口权限校验,所有者转移等操作,提高安全性

合约接口:Ownable

实现:

    1 构造函数中,将合约的部署者设置为合约所有者

    2 提供了modifier onlyOwner作为“注解”提供给需要进行权限校验的接口,如添加删除黑名单,代币增发赎回等操作。

    3 提供了接口transferOwnership用于转移合约的所有者到另一个[非0]地址

合约重点功能实现 —— 代币紧急暂停恢复

pausable合约实现

说明:usdt实现了一个Pausable接口用于进行合约的紧急管理(暂停和恢复),便于运行过程中对于未知安全风险的预防

合约接口:Pausable

实现:

    1 提供了pause和unpause2个接口用于更新合约状态,要求调用者必须是所有者,并且处于其他状态(如pause需要当前合约处于paused=true的状态)

    2 提供了modifier whenNotPaused和whenPaused作为“注解”提供给需要校验合约运行状态的接口,比如transfer, transferFrom等接口需要合约处于正常状态才能进行,否则拒绝执行

    3 当发生了暂停或恢复的状态变更时,抛出日志事件

合约重点功能实现 —— 代币用户黑名单

blackList合约实现

说明:用于黑名单地址的管理,进入黑名单的用户无法进行交易(可接受和查看),以及销毁黑名单地址代币余额,仅允许owner操作

合约接口:BlackList

实现:

    1 构造函数中,将所有者设置为合约的部署者

    2 销毁某个黑名单地址上的代币资产的时候,要求某个资产必须先在黑名单中,其次进行获取并扣除该地址的代币余额,再扣减整个代币的发行总量

    3 添加,删除黑名单,以及删除黑名单地址代币资产时,均会抛出对应的日志事件

合约重点功能实现 —— 主体合约功能

主体合约功能实现

说明:usdt在以太坊上的主体合约, 相关操作均由该合约实现, 包括前述功能,以及代币的增发赎回等

合约接口:TetherToken

实现:

    1 构造函数中(即合约部署时): 指定了合约的全名,代号,小数位数,是否已废弃(deprecated)以及新合约地址

    2 各个接口均有过期判定,如果当前合约已过期,就通过新版本合约的地址实现功能, 否则使用基类(StandardToken)对应接口

    3 代币增发时加到owner地址。代码上先加owner余额再加总发行量

    4 代币赎回时从owner地址删除。代码上先减总发行量

    5 各操作均会抛出对应的日志事件

特点:

    1 调用新合约时,传入了调用者的信息,避免新合约没有sender信息

合约重点功能实现 —— 合约便捷更新管理

更新合约实现

说明:用于便捷的进行usdt的合约升级,并且整个过程中仍然保持旧合约的正常访问

合约接口:UpgradedStandardToken

实现:

    1 当前usdt合约里未实现这个合约接口

    2 更新数据流:以太坊上新地址A发布usdt新合约——usdt当前合约设置为deprecated, 并填入新合约地址A——各个接口的访问通过访问地址A上的合约对应接口实现(如transfer, approve等)

    3 3个主要接口携带的参数均多了一个发起者地址

        新合约无法直接获取调用者地址(a合约调用b合约)

合约重点功能实现 —— 合约安全管理(多签合约)

说明:usdt通过把合约owner部署为一个多签钱包合约地址来完成绝大部分的风险管控。代币增发等重要操作需要3个及以上的管理人员同意。

合约:MultiSigWallet

实现:

    数据结构

        transctions  ->  提案id和对应的提案信息,包括目标地址,是否已执行,以及执行时的参数和函数信息

        confirmations -> 各管理人员的同意情况

        isOwner, owners -> 管理人员名单,方便遍历

        required -> 最低提案同意人数

    提案及执行数据流:

        提案后,多个管理人员各自访问合约的confirmTx接口同意提案

        submitTx(提交提案): 提交提案,无权限验证,由add和confirm构成

        addTx(添加提案):生成txId和结构, 并添加到映射txs。校验权限

        confirmTx(确认提案):默认提交者同意提案。检查并尝试执行提案

        executeTx(执行提案):如果同意的人数超过了要求,就发起执行。

        执行方式:tx.destination.call.value(tx.value)(tx.data)   

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 不上不下的生活,就是你明明想改变自己,却觉得自己像被卡住了一般,明明付出了努力,却不知道付出的努力到哪里去了。你不...
    遇见yh阅读 84评论 0 2
  • 我生来便是孤独的,而后也孑然一身,到底无法逃脱命运的安排
    桃匋阅读 121评论 0 1
  • 今天上午9:47,把小林coding的图解mysql部分看完了,总共看了嗯,大约六天,的每个上午当然了实际时间更短...
    景之_阅读 57评论 0 2
  • 自我价值评判标准 天赋和能力,达不到自己渴望的结果。 没有名,没有利,也没有荣誉,我一无所有,还到处欠债,欠了一堆...
    我心我愿秀阅读 58评论 0 0
  • 二十一世纪旧体诗词风骚榜[https://www.jianshu.com/c/da968ae2d498] 上榜絮语...
    张成昱阅读 450评论 1 20