原文作者:Visa,Andrew Beams、Catherine Gu 等
原文编译:PANews,Jordan
随着区块链采用率不断提高,人们对于卓越用户体验和支持实际用例的产品需求也变得越来越大。Visa 已经为客户(尤其是年轻客户)提供了便捷的自动扣款和定期自动付款功能,但像以太坊这样的区块链来说,实现这一功能似乎仍存在难度。以太坊是支付量最大的区块链网络,对于某些类型的链上数字钱包来说,定期从用户帐户中自动提取付款仍是一项“大工程”。
对此,Visa 提出了账户抽象(AccoutAbstraction)概念,并以此探索如何用智能合约来实现自动化可编程支付,以及演示如何为支持自动提取资金的自托管钱包编写智能合约。
用例场景
考虑一个场景:假设今天是 2 月 25 日,爱丽丝要去阿尔卑斯山度假,她将于 3 月 10 日返回,但又必须在每个月的 5 日之前支付房贷、有线电视费和水电费,问题是她在休假前并没有足够的钱去付款,不过在 3 月 1 日领到薪水时就会有足够的钱。现在问题来了,爱丽丝如何在不拖欠付款的情况下享受她的假期?
没错,答案就是——自动扣款。事实上,如果爱丽丝有一个银行账户,自动扣款是个非常简单的过程,只需将其扣款账户与 Visa 卡做个关联绑定即可。不过在区块链上,执行这样一个操作并不那么简单,然而作为一种新技术,值得我们探索上述场景的区块链智能合约解决方案。
在进入正题之前,让我们先了解一下以太坊账户的概念,目前以太坊网络上有两种类型的账户:
1、外部拥有账户(ExternallyOwnedAccounts),通常被称为“用户账户”
2、合约账户(ContractAccounts),通常被称为“智能合约”
由私钥控制的用户帐户可以发送交易,而智能合约需要关联代码才能执行,但智能合约无法“自己发起交易”,因为交易必须始终源自用户帐户并由用户签名,这些交易包括:以太坊区块链上用户账户之间的简单代币转移,或是触发一系列通过智能合约执行许多不同操作、更复杂的交易。
那么,如何在以太坊区块链上实现自动支付呢?
让我们回顾一下爱丽丝的状况。
假设爱丽丝在以太坊区块链上拥有一个用户账户,并且把自己的薪水存放在账户里并用来支付房贷、有线电视费和水电费。今天,为了支付她的账单,必须发起一项交易,将代币从她的“外部拥有账户”转移到收款人的用户帐户。
详细点说,爱丽丝的“外部拥有账户”有一个只有她本人才知道的密钥/私钥,也只有她可以使用这个私钥生成椭圆曲线数字签名算法 (ECDSA) 签名,这个前面对于创建有效交易至关重要。然而如果爱丽丝外出度假,谁来生成这个签名并创建费用支付交易呢?
目前有一种解决方案,就是让爱丽丝使用托管钱包,即让第三方控制爱丽丝的私钥。换句话说,爱丽丝信任第三方来保护她的资金并在她想交易或将资金发送到指定账户,这么做的好处是爱丽丝可以通过资金托管方来生成为预定自动付款创建交易所需的签名,但坏处是她必须完全信任这个第三方。
那么,如果爱丽丝因为担心风险不想使用托管钱包,而是使用自我保管的钱包并安排自动付款,该怎么做呢?接下来,让我们引入另一个概念——账户抽象(AccountAbstraction)。
什么是账户抽象?
账户抽象是一项尝试通过使用户账户像智能合约一样运行、并且将用户账户和智能合约合并为一个全新以太坊账户类型的提案。未来,账户抽象将能使我们为自动支付设计一个简洁的解决方案,而且在链上验证交易过程中具有更大的灵活性,比如:
1、可通过多重签名验证启用多所有者帐户。
2、允许使用后量子签名来验证交易。
3、允许一个所谓的公共账户,任何人都可以通过完全取消签名验证来进行交易。
本质上,账户抽象允许可编程的有效性来验证和确认任何区块链交易,基于以太坊协议的交易不必完全基于有效性条件的硬编码,而是可以基于“定制化”方式将一些条件写入账户智能合约中。
更重要的是,由于可以设置不再包括签名验证的有效性规则,账户抽象支持自动支付,下面就让我们来看看如何实现吧。
可委托账户——用账户抽象来实现以太坊链上自动支付功能
Visa 的以太坊自动支付解决方案是利用账户抽象概念并创建一种新型账户合约——可委托账户,其主要想法是扩展交易的可编程有效性规则以包括预先批准的允许列表。简单来说,账户抽象可以将用户账户发起的自动支付操作委托给预先批准的自动支付智能合约。
首先,商户需要部署自动支付智能合约。当拥有可委托账户的用户访问商家网站时,他们将看到批准自动支付的请求——类似于 Visa 接受的账单。此时,用户可以看到自动支付合约将以用户的名义执行操作,其中能够按照用户需要设定参数,比如每月只能向用户收费一次、收费不能超过设定的最大金额等。最重要的是,由于这是一个智能合约,用户可以确信自动支付合约不会以其他方式被执行。
如果用户同意批准自动支付,钱包会将自动支付合约的地址添加到用户可委托账户的允许合约列表中。
接下来,商户通过调用自动支付合约的 charge(收费)函数触发支付。自动支付合约就会触发用户的账户发起一笔推送支付交易,这笔交易将是有效交易,因为已被预先添加到允许列表中。
除了经常性支付之外,该解决方案还可以满足现实世界里的其他不同应用,Visa 委托账户解决方案未来甚至可以扩展到第三方账户恢复等服务。
在 StarkNet 上实施账户抽象
由于以太坊尚不支持账户抽象,Visa 已经在 StarkNet 上实施可委托账户解决方案,StarkNet 是 Layer 2 区块链,建立在以太坊区块链之上,以提高交易吞吐量以及其他功能以改善底层区块链结算层能力,由加密初创公司StarkWare开发。StarkNet 的账户模型就是 Visa 目前所说的账户抽象,抽象账户则会检查交易是否来自给定地址。
对于具体账户(concrete accounts),如果有人向用户账户发送代币,会与代币合约交互,代币合约会检查用于签署交易以进行此传输的身份(密钥)是否记录为代币的当前所有者。对于抽象账户(abstract accounts),如果有人向您的账户发送代币,也会与代币合约交互,代币合约会检查用于进行此转移的身份(合约)是否被记录为代币的当前所有者。对于抽象账户,重要的是谁(地址)在执行交易,而不是如何(签名)执行交易。
借助 StarkNet 账户模型,Visa 能够实施可委托账户解决方案,从而为自托管钱包启用自动支付功能。
结论
作为世界上最大的支付网络之一,Visa 正在积极探索智能合约创新解决方案,以推动实现可编程 货币 和支付。
自动支付是现有区块链基础设施所缺乏的核心功能之一,但利用账户抽象的概念可以为自托管钱包提供自动定期支付功能,甚至可以将自动支付之外的其他现实世界应用引入区块链,继而为传统支付渠道和新兴支付渠道创造更好的用户体验。