
多签钱包的工作原理与使用方式
什么是多签钱包?多签名钱包常被缩写为 “Multisig wallet”,与多签钱包对应的是单签钱包,我们要往区块链上发送一笔转账交易,需要去用钱包去做一个签名,我们自己签好名把交易发送出去,交易执行成功转账就成功,这就是典型的单签钱包,也是我们平时使用最多的钱包。 多签钱包,顾名思义,就是需要多个人去签名执行某个操作的钱包。使用多签钱包进行转账,往往需要 >= 1 个人去签名发送交易之后,转账操作才真正完成。使用多签钱包时,我们可以指定 m/n 的签名模式,就是 n 个人里面有 m 个人签名即可完成操作。可以根据自己的需求设置多签规则,例如:1/2多签模式:两个互相信任的朋友或自己的两个钱包,可以凭各自的私钥独立发起交易(类似于合伙账户)。2/2多签模式:金库中的资金需要2个管理员均同意才能动用这笔资金(需要两个私钥才能转移资金)。2/3多签模式:三个合伙人共同管理资金,为了规避私钥丢失的风险,其中两个私钥签名就可以转移资金。当然,还有1/3多签、3/6多签、5/8多签不同规则的多签方案,规则是按需的。多签钱包最大的特点是需由多个私钥持有者的授权才能进行钱包交易。我们讲了这么多...

分析Luna的流动性与Terra的命运
下文是来自对 0x_Todd 推文的整理: https://twitter.com/0x_Todd/status/1524605026122960896 1.1 眼见它起朱楼,眼见它楼塌了。 其实 $Luna 的问题只关乎一个词:“流动性”。 Luna作为流动性不够好的波动资产,却可以1:1等值铸造UST,并借助Curve等EX获得了稳定币才配拥有的法币流动性。从这天起,就已注定它的死亡。而20% APR更是一个加速的总按钮。 2.1 先说说原因,导火索-UST大户离场。 5月8号,兴致勃勃的Terra正在为号称“终结Curve War”的4pool做准备(Curve上的新池子),临时撤出了老池子的流动性。 但是8400w UST也许是误判,也许是狙击,直接将UST在Curve市价砸出,一下子就把没有准备的UST砸脱了锚。 2.2 发酵-Terra的错误救市PR。 我曾经说过,信心盘靠的是信心。如果信心丧失,那就是万劫不复的开始。 脱锚后,其实应该继续打鸡血,喝鸡汤,轻描淡写就过去了。 但是Terra却一直反向PR:我们在救市!我们去撑这个锚了。 这很糟糕,传递了负面信心:你说你...

译文:了解代币经济学
原文是 The DeFi Edge 发布的长推,主题围绕的关键词 Tokenomics,可以翻译为代币经济学或者代币经济模型。 https://twitter.com/thedefiedge/status/1511737802655903744 我今天要讲的内容包括:什么是代币经济学?通过供应、需求和激励措施对协议进行评估代币经济学的例子免费的代币经济模型检查表接下来就让我们一起去了解 Tokenomics什么是代币经济学?代币经济学研究的是推动代币需求的因素。 代币经济学包括:数学供需关系激励措施价值累加人类行为与博弈论代币经济学 = 代币 + 经济学我早前的一些最糟糕的投资就是由于我当时不了解代币经济学是怎么回事。代币在没有足够效用的情况下会导致通胀。风险投资公司(VC)和鲸鱼(Whales)对代币的集中会导致散户面临抛压。因此,研究代币经济学将有助于改善你的加密货币投资。 开始学习代币经济学的最简单的知识是了解供应和需求。 关于无聊猿的例子(@BoredApeYC):现在有1万只地板价为111 ETH的无聊猿NFT,如果它的供应链增加一倍,现在有2万只无聊猿,那会发生什么?...
分享加密技术与资讯



多签钱包的工作原理与使用方式
什么是多签钱包?多签名钱包常被缩写为 “Multisig wallet”,与多签钱包对应的是单签钱包,我们要往区块链上发送一笔转账交易,需要去用钱包去做一个签名,我们自己签好名把交易发送出去,交易执行成功转账就成功,这就是典型的单签钱包,也是我们平时使用最多的钱包。 多签钱包,顾名思义,就是需要多个人去签名执行某个操作的钱包。使用多签钱包进行转账,往往需要 >= 1 个人去签名发送交易之后,转账操作才真正完成。使用多签钱包时,我们可以指定 m/n 的签名模式,就是 n 个人里面有 m 个人签名即可完成操作。可以根据自己的需求设置多签规则,例如:1/2多签模式:两个互相信任的朋友或自己的两个钱包,可以凭各自的私钥独立发起交易(类似于合伙账户)。2/2多签模式:金库中的资金需要2个管理员均同意才能动用这笔资金(需要两个私钥才能转移资金)。2/3多签模式:三个合伙人共同管理资金,为了规避私钥丢失的风险,其中两个私钥签名就可以转移资金。当然,还有1/3多签、3/6多签、5/8多签不同规则的多签方案,规则是按需的。多签钱包最大的特点是需由多个私钥持有者的授权才能进行钱包交易。我们讲了这么多...

分析Luna的流动性与Terra的命运
下文是来自对 0x_Todd 推文的整理: https://twitter.com/0x_Todd/status/1524605026122960896 1.1 眼见它起朱楼,眼见它楼塌了。 其实 $Luna 的问题只关乎一个词:“流动性”。 Luna作为流动性不够好的波动资产,却可以1:1等值铸造UST,并借助Curve等EX获得了稳定币才配拥有的法币流动性。从这天起,就已注定它的死亡。而20% APR更是一个加速的总按钮。 2.1 先说说原因,导火索-UST大户离场。 5月8号,兴致勃勃的Terra正在为号称“终结Curve War”的4pool做准备(Curve上的新池子),临时撤出了老池子的流动性。 但是8400w UST也许是误判,也许是狙击,直接将UST在Curve市价砸出,一下子就把没有准备的UST砸脱了锚。 2.2 发酵-Terra的错误救市PR。 我曾经说过,信心盘靠的是信心。如果信心丧失,那就是万劫不复的开始。 脱锚后,其实应该继续打鸡血,喝鸡汤,轻描淡写就过去了。 但是Terra却一直反向PR:我们在救市!我们去撑这个锚了。 这很糟糕,传递了负面信心:你说你...

译文:了解代币经济学
原文是 The DeFi Edge 发布的长推,主题围绕的关键词 Tokenomics,可以翻译为代币经济学或者代币经济模型。 https://twitter.com/thedefiedge/status/1511737802655903744 我今天要讲的内容包括:什么是代币经济学?通过供应、需求和激励措施对协议进行评估代币经济学的例子免费的代币经济模型检查表接下来就让我们一起去了解 Tokenomics什么是代币经济学?代币经济学研究的是推动代币需求的因素。 代币经济学包括:数学供需关系激励措施价值累加人类行为与博弈论代币经济学 = 代币 + 经济学我早前的一些最糟糕的投资就是由于我当时不了解代币经济学是怎么回事。代币在没有足够效用的情况下会导致通胀。风险投资公司(VC)和鲸鱼(Whales)对代币的集中会导致散户面临抛压。因此,研究代币经济学将有助于改善你的加密货币投资。 开始学习代币经济学的最简单的知识是了解供应和需求。 关于无聊猿的例子(@BoredApeYC):现在有1万只地板价为111 ETH的无聊猿NFT,如果它的供应链增加一倍,现在有2万只无聊猿,那会发生什么?...
分享加密技术与资讯
Share Dialog
Share Dialog

Subscribe to 稻田君

Subscribe to 稻田君
<100 subscribers
<100 subscribers
这是一篇对实现一个加密货币支付平台的技术方案的基础的思考和调研,思考之所以排在调研前是因为先想到了加密货币实现在线支付的场景,然后通过调研验证了自己的想法。
写这篇文章的起源是,是想给自己规划的个人项目加在线支付的场景,比如微信支付、支付宝、Paypal等,但个人非公司主体在如何简单快速实现支付的对接时让我有了一些思考,既然链上的账本交易是公开的,是不是可以实现加密货币的支付系统呢?细想来链路是通的实现并不复杂。然后又扩展想到如何实现一个加密货币聚合支付的平台服务商,带着这个疑问梳理出了下文的内容。

又是偶然的机会在 TradingView 的付费流程里看到了加密支付的选项,顺着又发现了 Coinbase 提供的支付商户服务 Coinbase Commerce,通过简单的体验了流程基本上验证了我的想法,当然类似的服务还有 BitPay。
关键词:#加密货币 #聚合支付 #支付商户服务平台 #支付服务商
名词解释:用户、商户、支付服务商(下文会围绕这三者展开,即用户在商户电商系统通过支付服务商发起加密货币支付)

币安给用户现货账户的币种对应网络创建对应收款账户(如USDT对应TRX转账网络)
这是一篇对实现一个加密货币支付平台的技术方案的基础的思考和调研,思考之所以排在调研前是因为先想到了加密货币实现在线支付的场景,然后通过调研验证了自己的想法。
写这篇文章的起源是,是想给自己规划的个人项目加在线支付的场景,比如微信支付、支付宝、Paypal等,但个人非公司主体在如何简单快速实现支付的对接时让我有了一些思考,既然链上的账本交易是公开的,是不是可以实现加密货币的支付系统呢?细想来链路是通的实现并不复杂。然后又扩展想到如何实现一个加密货币聚合支付的平台服务商,带着这个疑问梳理出了下文的内容。

又是偶然的机会在 TradingView 的付费流程里看到了加密支付的选项,顺着又发现了 Coinbase 提供的支付商户服务 Coinbase Commerce,通过简单的体验了流程基本上验证了我的想法,当然类似的服务还有 BitPay。
关键词:#加密货币 #聚合支付 #支付商户服务平台 #支付服务商
名词解释:用户、商户、支付服务商(下文会围绕这三者展开,即用户在商户电商系统通过支付服务商发起加密货币支付)

币安给用户现货账户的币种对应网络创建对应收款账户(如USDT对应TRX转账网络)
目的在于确认链上的一笔交易是指向到特定用户的(即确认收款方身份)
这个收款账户的控制方是币安,但该地址与特定用户一对一关联
当然这个账户并非是外部账户, 而是一个支持收款的合约账户(通过CREATE2预生成)
从币安复制USDT充值地址
从外部(其他交易所或钱包)将USDT对应TRX网络发起转账
币安在USDT钱包地址(充值地址)中检测到成功的交易
币安在收款账户对应用户的现货账户的USDT币种增加余额
币安定期将分散的临时地址中的余额汇总到热钱包中(创建合约然后再selfdestruct销毁合约)
交易所是给用户维度(用户对应币种和网络)创建的钱包地址,来保障一个钱包地址的一笔/多笔充值均可以关联到该用户
如果按交易所充值的做法来实现商户的收款,在商户维度创建钱包地址,但同一个商户地址会同时接受不同用户的付款交易,那商户就无法确认交易与用户的关系
中心化支付服务商(如Alipay/Paypal)的做法是在交易信息中增加「商户订单号」的形式来确权的
所以需要在支付单维度为每笔订单生成唯一收款账户,这样就保障了链上交易记录与订单挂钩,订单又与用户挂钩
用户在商户侧购买商品并发起结算生成加密支付的交易单,跳转至聚合支付服务商收银台
用户选择需要支付的加密货币类型(如ERC20网络的USDT)
支付服务商为商户的该笔交易单创建唯一的收款地址(合约地址)
支付服务商开始监测该收款地址的变动
用户向交易单对应的钱包地址进行转账
支付服务商监测到该地址产生了已确认的交易后,向商户进行支付通知
商户侧收到支付通知后标记订单支付

涉及到两个话题,一个是资金安全,另一个是商户的提现流程如何设计,这两个话题之所以一起描述是因为有很紧密的关系
资金安全,或者理解为如何做到商户对支付平台的单向信任,说的直白一点就是钱你平台收了,那会不会跑路或者你的钱包私钥泄露了怎么办
资金入账,即支付服务商收的款项以什么样的流程转移到商家自己控制的钱包里
收款账户的地址可以选择外部账户(Externally-owned account) 和合约账户(Contract account), 我们对比一下选出最优的
外部账户:为每一笔交易创建一个外部账户,支付服务商需要托管账户的私钥
合约账户:为每一笔交易创建一个智能合约并用合约地址作为收款地址,避免保存地址的私钥信息,通过调用智能合约进行资金转移
显然,方案2从资金安全考虑是最优的,但为每一笔交易都部署合约显然是昂贵的,所以最优的方式是通过CREATE2操作码预计算出合约地址,通过此地址先进行收款,等需要转移资金时再部署合约
前文提到为每一笔交易预创建一个合约地址收的资金,会有两个流向:商户的钱包(入账)、服务商的钱包(分佣),下面讲解如何将合约钱包中的数字货币进行转移的
为预生成的地址实际创建合约,合约中标明资金的转移规则
按平台佣金规则计算出的佣金,转账到平台账户
剩余的资金转账到商户账户
销毁合约(通过自毁函数 selfdestruct),这将退还部署智能合约部分的Gas费
此时资金已经成功入账和分佣,但是这种方式安全吗?我们会在合约的构造方法里加上入账方的地址参数,这样确保了接受者始终是我们预期的,这样无论如何攻击者都无法使用任何收款来获取资金的控制权。
一笔交易完成后,在很短的时间里会通过智能合约进行资金转移,即资金会入账到商户自己的钱包里,如何保障钱包的安全至关重要
在商户在支付服务商平台首次注册时,在客户端生成钱包(含地址、助记词、私钥),私钥信息绝对不会发送到服务商的服务端
当然此时秘钥等信息的安全备份会是商家的重点,否则损失无法挽回
也可以有加密备份私钥的方式可选,服务商只存储加密密钥,做双重保险(如Coinbase Commerce 提供的将加密版本的私钥存储到Google Drive的方式)
服务商仅将钱包地址存储以进行资金的转入
商户提现,当然此时钱包就是自己也不存在提现一说了,如果就是想将服务商帮创建的钱包余额转移到自己的钱包中
商户可以将助记词导入到钱包工具中自行转账
如果需要服务商平台执行,那就需要商户通过自行上传的秘钥在客户端进行对交易进行签名,由服务商把签名后的交易广播出去
这里部署在以太坊测试网上的合约地址为 :0x4d3e2C755aCCeDb752878b2E025Bdfa2cFE7116C



CREATE2 定义了新的账户生成方式:keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:] (其中 Account a = new Account{salt: _salt}(_to); 是 Solidity 0.6.2 加入的支持 CREATE2 的语法糖)。





通过调用 Wallet 合约的 create 方法来创建 Account 合约:https://rinkeby.etherscan.io/address/0x4d3e2C755aCCeDb752878b2E025Bdfa2cFE7116C#writeContract
Account 合约创建后在构造方法中直接实现了资金的转移,无需显示调用,验证合约的资金流向:https://rinkeby.etherscan.io/address/0xdebedc5e19376c4c2c8b365d47cf7dc031cd7a7a#internaltx
最后,其实还有很多细节问题没有涉及到,比如小额支付时的佣金无法覆盖创建合约和转账的Gas成本、用户多支付的退款流程、用户商户侧主动发起退款流程、在支付服务中币价波动风险及应对策略等的思考,以后有机会再和大家分享。
感谢阅读!如果有问题交流,可以关注并私信我:微信(jingwentian)、Twitter(@0xDaotian)、微信公众号(北极之野)、Substack邮件订阅(文叔白话WEB3)。
目的在于确认链上的一笔交易是指向到特定用户的(即确认收款方身份)
这个收款账户的控制方是币安,但该地址与特定用户一对一关联
当然这个账户并非是外部账户, 而是一个支持收款的合约账户(通过CREATE2预生成)
从币安复制USDT充值地址
从外部(其他交易所或钱包)将USDT对应TRX网络发起转账
币安在USDT钱包地址(充值地址)中检测到成功的交易
币安在收款账户对应用户的现货账户的USDT币种增加余额
币安定期将分散的临时地址中的余额汇总到热钱包中(创建合约然后再selfdestruct销毁合约)
交易所是给用户维度(用户对应币种和网络)创建的钱包地址,来保障一个钱包地址的一笔/多笔充值均可以关联到该用户
如果按交易所充值的做法来实现商户的收款,在商户维度创建钱包地址,但同一个商户地址会同时接受不同用户的付款交易,那商户就无法确认交易与用户的关系
中心化支付服务商(如Alipay/Paypal)的做法是在交易信息中增加「商户订单号」的形式来确权的
所以需要在支付单维度为每笔订单生成唯一收款账户,这样就保障了链上交易记录与订单挂钩,订单又与用户挂钩
用户在商户侧购买商品并发起结算生成加密支付的交易单,跳转至聚合支付服务商收银台
用户选择需要支付的加密货币类型(如ERC20网络的USDT)
支付服务商为商户的该笔交易单创建唯一的收款地址(合约地址)
支付服务商开始监测该收款地址的变动
用户向交易单对应的钱包地址进行转账
支付服务商监测到该地址产生了已确认的交易后,向商户进行支付通知
商户侧收到支付通知后标记订单支付

涉及到两个话题,一个是资金安全,另一个是商户的提现流程如何设计,这两个话题之所以一起描述是因为有很紧密的关系
资金安全,或者理解为如何做到商户对支付平台的单向信任,说的直白一点就是钱你平台收了,那会不会跑路或者你的钱包私钥泄露了怎么办
资金入账,即支付服务商收的款项以什么样的流程转移到商家自己控制的钱包里
收款账户的地址可以选择外部账户(Externally-owned account) 和合约账户(Contract account), 我们对比一下选出最优的
外部账户:为每一笔交易创建一个外部账户,支付服务商需要托管账户的私钥
合约账户:为每一笔交易创建一个智能合约并用合约地址作为收款地址,避免保存地址的私钥信息,通过调用智能合约进行资金转移
显然,方案2从资金安全考虑是最优的,但为每一笔交易都部署合约显然是昂贵的,所以最优的方式是通过CREATE2操作码预计算出合约地址,通过此地址先进行收款,等需要转移资金时再部署合约
前文提到为每一笔交易预创建一个合约地址收的资金,会有两个流向:商户的钱包(入账)、服务商的钱包(分佣),下面讲解如何将合约钱包中的数字货币进行转移的
为预生成的地址实际创建合约,合约中标明资金的转移规则
按平台佣金规则计算出的佣金,转账到平台账户
剩余的资金转账到商户账户
销毁合约(通过自毁函数 selfdestruct),这将退还部署智能合约部分的Gas费
此时资金已经成功入账和分佣,但是这种方式安全吗?我们会在合约的构造方法里加上入账方的地址参数,这样确保了接受者始终是我们预期的,这样无论如何攻击者都无法使用任何收款来获取资金的控制权。
一笔交易完成后,在很短的时间里会通过智能合约进行资金转移,即资金会入账到商户自己的钱包里,如何保障钱包的安全至关重要
在商户在支付服务商平台首次注册时,在客户端生成钱包(含地址、助记词、私钥),私钥信息绝对不会发送到服务商的服务端
当然此时秘钥等信息的安全备份会是商家的重点,否则损失无法挽回
也可以有加密备份私钥的方式可选,服务商只存储加密密钥,做双重保险(如Coinbase Commerce 提供的将加密版本的私钥存储到Google Drive的方式)
服务商仅将钱包地址存储以进行资金的转入
商户提现,当然此时钱包就是自己也不存在提现一说了,如果就是想将服务商帮创建的钱包余额转移到自己的钱包中
商户可以将助记词导入到钱包工具中自行转账
如果需要服务商平台执行,那就需要商户通过自行上传的秘钥在客户端进行对交易进行签名,由服务商把签名后的交易广播出去
这里部署在以太坊测试网上的合约地址为 :0x4d3e2C755aCCeDb752878b2E025Bdfa2cFE7116C



CREATE2 定义了新的账户生成方式:keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:] (其中 Account a = new Account{salt: _salt}(_to); 是 Solidity 0.6.2 加入的支持 CREATE2 的语法糖)。





通过调用 Wallet 合约的 create 方法来创建 Account 合约:https://rinkeby.etherscan.io/address/0x4d3e2C755aCCeDb752878b2E025Bdfa2cFE7116C#writeContract
Account 合约创建后在构造方法中直接实现了资金的转移,无需显示调用,验证合约的资金流向:https://rinkeby.etherscan.io/address/0xdebedc5e19376c4c2c8b365d47cf7dc031cd7a7a#internaltx
最后,其实还有很多细节问题没有涉及到,比如小额支付时的佣金无法覆盖创建合约和转账的Gas成本、用户多支付的退款流程、用户商户侧主动发起退款流程、在支付服务中币价波动风险及应对策略等的思考,以后有机会再和大家分享。
感谢阅读!如果有问题交流,可以关注并私信我:微信(jingwentian)、Twitter(@0xDaotian)、微信公众号(北极之野)、Substack邮件订阅(文叔白话WEB3)。
No activity yet