About Multisig & AA
多签钱包多签钱包是一种电子钱包,特点是交易被多个私钥持有者(多签人)授权后才能执行:例如钱包由3个多签人管理,每笔交易需要至少2人签名授权。多签钱包可以防止单点故障(私钥丢失,单人作恶),更加去中心化,更加安全,被很多DAO采用。多签钱包合约在以太坊上的多签钱包其实是智能合约,属于合约钱包。下面我们写一个极简版多签钱包MultisigWallet合约,它的逻辑非常简单:设置多签人和门槛(链上):部署多签合约时,我们需要初始化多签人列表和执行门槛(至少n个多签人签名授权后,交易才能执行)。Gnosis Safe多签钱包支持增加/删除多签人以及改变执行门槛,但在咱们的极简版中不考虑这一功能。创建交易(链下):一笔待授权的交易包含以下内容to:目标合约。value:交易发送的以太坊数量。data:calldata,包含调用函数的选择器和参数。nonce:初始为0,随着多签合约每笔成功执行的交易递增的值,可以防止签名重放攻击。chainid:链id,防止不同链的签名重放攻击。收集多签签名(链下):将上一步的交易ABI编码并计算哈希,得到交易哈希,然后让多签人签名,并拼接到一起的到打包签名...
About Multisig & AA
多签钱包多签钱包是一种电子钱包,特点是交易被多个私钥持有者(多签人)授权后才能执行:例如钱包由3个多签人管理,每笔交易需要至少2人签名授权。多签钱包可以防止单点故障(私钥丢失,单人作恶),更加去中心化,更加安全,被很多DAO采用。多签钱包合约在以太坊上的多签钱包其实是智能合约,属于合约钱包。下面我们写一个极简版多签钱包MultisigWallet合约,它的逻辑非常简单:设置多签人和门槛(链上):部署多签合约时,我们需要初始化多签人列表和执行门槛(至少n个多签人签名授权后,交易才能执行)。Gnosis Safe多签钱包支持增加/删除多签人以及改变执行门槛,但在咱们的极简版中不考虑这一功能。创建交易(链下):一笔待授权的交易包含以下内容to:目标合约。value:交易发送的以太坊数量。data:calldata,包含调用函数的选择器和参数。nonce:初始为0,随着多签合约每笔成功执行的交易递增的值,可以防止签名重放攻击。chainid:链id,防止不同链的签名重放攻击。收集多签签名(链下):将上一步的交易ABI编码并计算哈希,得到交易哈希,然后让多签人签名,并拼接到一起的到打包签名...
About Gas
Gas优化变量声明为constant immutable 使用位运算符函数参数声明为calldata memory循环使用unchecked避免溢出检查uint256占满32字节插槽最节省gas,变量打包(在一个插槽中放置多个变量)revert配合error最省gas,同时可以携带变量。require的gas随字符串长度增加运算中使用局部变量创造子合约时 clone > new > create2增加使用i = i +n,递增使用 ++i重入保护中,使用Uint12 > Uint01 > Bool,0到非0转换会消耗大量gas"<" 和 ">"比"≤" 和 "≥"更加高效,EVM没有针对"≤" 和 "≥"的OPCODE通过优化函数名,增加calldata中方法id的0字节的个数来节省gas(0字节消耗 4 gas,非0字节消耗 16 gas)合约内所有函数是一个数组,调用时会先遍历,通过排序函数减少遍历复杂度短路判断,update后delete变量或恢复初始值,创建变量时不赋值(使用初始值)构造函数非payable,使用bytes32存字符串,使用定长数组,使用事件存储数据,ma...
About Gas
Gas优化变量声明为constant immutable 使用位运算符函数参数声明为calldata memory循环使用unchecked避免溢出检查uint256占满32字节插槽最节省gas,变量打包(在一个插槽中放置多个变量)revert配合error最省gas,同时可以携带变量。require的gas随字符串长度增加运算中使用局部变量创造子合约时 clone > new > create2增加使用i = i +n,递增使用 ++i重入保护中,使用Uint12 > Uint01 > Bool,0到非0转换会消耗大量gas"<" 和 ">"比"≤" 和 "≥"更加高效,EVM没有针对"≤" 和 "≥"的OPCODE通过优化函数名,增加calldata中方法id的0字节的个数来节省gas(0字节消耗 4 gas,非0字节消耗 16 gas)合约内所有函数是一个数组,调用时会先遍历,通过排序函数减少遍历复杂度短路判断,update后delete变量或恢复初始值,创建变量时不赋值(使用初始值)构造函数非payable,使用bytes32存字符串,使用定长数组,使用事件存储数据,ma...
About Security & Auditing
常见的合约攻击: 重入攻击reentrancy attack、NFT重入攻击 : 利用一个恶意合约,通过fallback和receive机制在合约执行过程中多次调用合约的函数 解决办法: 1.检查-影响-交互模式:先改变状态,将调用call外部合约作为函数或交易的最后一步 2.互斥锁:利用oppezepplin提供的nonReentrant修饰器 预言机攻击oracle attacks: 攻击者试图操纵或篡改由预言机提供的外部数据,导致自动化程序的智能合约做出错误的决策 解决办法:使用多个数据源、不要使用现货/瞬时价格、流动性差的池子做价格预言机 权限管理漏洞,使用 Openzeppelin 的权限管理库预防 签名重放 坏随机数,使用预言机项目提供的链下随机数 拒绝服务 抢先交易,通过减少交易顺序或时间的重要性 Defi中最常见漏洞:中心化风险指智能合约的所有权是中心化的,合约的owner由一个地址控制,它可以随意修改合约参数。伪去中心化的项目通常对外鼓吹自己是去中心化的,但实际上和中心化项目一样存在单点风险。比如使用多签钱包来管理智能合约,但几个多签人是一致行动人,背后由一个人...
About Security & Auditing
常见的合约攻击: 重入攻击reentrancy attack、NFT重入攻击 : 利用一个恶意合约,通过fallback和receive机制在合约执行过程中多次调用合约的函数 解决办法: 1.检查-影响-交互模式:先改变状态,将调用call外部合约作为函数或交易的最后一步 2.互斥锁:利用oppezepplin提供的nonReentrant修饰器 预言机攻击oracle attacks: 攻击者试图操纵或篡改由预言机提供的外部数据,导致自动化程序的智能合约做出错误的决策 解决办法:使用多个数据源、不要使用现货/瞬时价格、流动性差的池子做价格预言机 权限管理漏洞,使用 Openzeppelin 的权限管理库预防 签名重放 坏随机数,使用预言机项目提供的链下随机数 拒绝服务 抢先交易,通过减少交易顺序或时间的重要性 Defi中最常见漏洞:中心化风险指智能合约的所有权是中心化的,合约的owner由一个地址控制,它可以随意修改合约参数。伪去中心化的项目通常对外鼓吹自己是去中心化的,但实际上和中心化项目一样存在单点风险。比如使用多签钱包来管理智能合约,但几个多签人是一致行动人,背后由一个人...
About BTC & ETH & EVM
比特币白皮书摒弃中心化机构:白皮书批评了传统金融体系中的银行和政府机构,认为它们过于集中权力和控制货币。比特币的目标是通过去中心化来减少对第三方机构的依赖。白皮书描述了比特币的目标,即创建一种去中心化的电子现金系统,使人们能够在互联网上直接进行点对点的价值交换,无需依赖中间机构,如银行。区块链技术:白皮书提出了区块链技术的概念,描述了一种分布式账本系统,其中交易按照时间戳记录在区块中,然后链接成一个不断增长的链。这种技术用于确保交易的透明性和安全性。工作量证明(Proof of Work,PoW):比特币白皮书详细解释了PoW机制,它是比特币网络用来验证和添加新交易到区块链的方式。矿工通过解决数学难题来获得权利添加新区块,并获得相应的比特币奖励。货币发行:白皮书规定了比特币的总供应量为2100万枚,并描述了比特币的发行方式,即每个区块奖励的比特币数量会逐渐减少,以控制通货膨胀。双花问题的解决:白皮书讨论了比特币如何防止同一比特币被多次花费的问题,通过区块链的不可篡改性和网络中的共识机制来解决这个问题。去中心化的维护:白皮书强调了比特币网络的去中心化特性,没有单一机构或个人控制网络...
About BTC & ETH & EVM
比特币白皮书摒弃中心化机构:白皮书批评了传统金融体系中的银行和政府机构,认为它们过于集中权力和控制货币。比特币的目标是通过去中心化来减少对第三方机构的依赖。白皮书描述了比特币的目标,即创建一种去中心化的电子现金系统,使人们能够在互联网上直接进行点对点的价值交换,无需依赖中间机构,如银行。区块链技术:白皮书提出了区块链技术的概念,描述了一种分布式账本系统,其中交易按照时间戳记录在区块中,然后链接成一个不断增长的链。这种技术用于确保交易的透明性和安全性。工作量证明(Proof of Work,PoW):比特币白皮书详细解释了PoW机制,它是比特币网络用来验证和添加新交易到区块链的方式。矿工通过解决数学难题来获得权利添加新区块,并获得相应的比特币奖励。货币发行:白皮书规定了比特币的总供应量为2100万枚,并描述了比特币的发行方式,即每个区块奖励的比特币数量会逐渐减少,以控制通货膨胀。双花问题的解决:白皮书讨论了比特币如何防止同一比特币被多次花费的问题,通过区块链的不可篡改性和网络中的共识机制来解决这个问题。去中心化的维护:白皮书强调了比特币网络的去中心化特性,没有单一机构或个人控制网络...
About Defi
什么是稳定币货币的三大功能:1.存储价值 2.记账单位 3.交换媒介稳定币(Stablecoin)是一种加密货币,其价值相对稳定,通常与传统货币或其他资产挂钩稳定币的主要目的是提供加密货币市场中的价格稳定性,以便用于交易、储值和合同执行,而无需经历加密货币通常的剧烈价格波动。外生稳定币:一种是价值与特定的法定货币一一对应,最常见的是美元。例如,USDT是以美元为基础的稳定币,每个稳定币都声称与美元一对一挂钩。另一种是价值与其他加密资产挂钩,如ETH或BTC。这种类型的稳定币通常会采用一定的机制来维持价值的稳定性,例如锁定一定数量的加密资产作为抵押。内生稳定币:这些稳定币的价值由智能合约和算法控制,而不是与实际资产挂钩。算法稳定币的供应量和价格通常由市场需求和供应情况来调整。例如RaiDAI去中心化管理:DAI 由去中心化自治组织 MakerDAO 管理抵押品锁定:DAI 的稳定性是通过用户锁定加密资产作为抵押品来实现的。借款和还款:用户可以借出 DAI,同时锁定抵押品。需要支付一定的稳定费,以及按照借款量计算的借款利率费用。还款 DAI 可以解锁抵押品。自动调整:DAI 的供应量...
About Defi
什么是稳定币货币的三大功能:1.存储价值 2.记账单位 3.交换媒介稳定币(Stablecoin)是一种加密货币,其价值相对稳定,通常与传统货币或其他资产挂钩稳定币的主要目的是提供加密货币市场中的价格稳定性,以便用于交易、储值和合同执行,而无需经历加密货币通常的剧烈价格波动。外生稳定币:一种是价值与特定的法定货币一一对应,最常见的是美元。例如,USDT是以美元为基础的稳定币,每个稳定币都声称与美元一对一挂钩。另一种是价值与其他加密资产挂钩,如ETH或BTC。这种类型的稳定币通常会采用一定的机制来维持价值的稳定性,例如锁定一定数量的加密资产作为抵押。内生稳定币:这些稳定币的价值由智能合约和算法控制,而不是与实际资产挂钩。算法稳定币的供应量和价格通常由市场需求和供应情况来调整。例如RaiDAI去中心化管理:DAI 由去中心化自治组织 MakerDAO 管理抵押品锁定:DAI 的稳定性是通过用户锁定加密资产作为抵押品来实现的。借款和还款:用户可以借出 DAI,同时锁定抵押品。需要支付一定的稳定费,以及按照借款量计算的借款利率费用。还款 DAI 可以解锁抵押品。自动调整:DAI 的供应量...