用戶登錄Web3很困難:如何通過賬戶抽象和流量讓它變得更好
譯文譯者 | 李睿
審校 | 重樓
51CTO讀者成長計劃社群招募,咨詢小助手(微信號:CTOjishuzhan)
對于開發Web3應用程序的開發者來說,通常知道讓用戶登錄Web3很困難。即使承諾用戶真正擁有自己的數據,進行近乎免費的全球支付,并使用無審查的系統,創建和使用數字錢包的過程還是非常困難。
幸運的是,還有更好的方法。帳戶抽象(Account Abstraction)承諾簡化流程,使用戶登錄更加無縫和簡單。流量(Flow)是一個去中心化的、公共的、第一層區塊鏈,旨在為用戶構建Web3體驗而設計,它使用帳戶抽象將混合托管模型與無數字錢包登錄相結合,從而創建了一個像傳統應用程序一樣簡單和直接的登錄。
以下深入了解一下混合托管和無錢包登錄是如何協同工作的,例如在架構、代碼,以及可以期待的進展等方面。
一、為什么登錄Web3如此困難
數字錢包帶來了Web3的所有好處,包括保證沒有人可以控制你的資產。沒有中間人,例如銀行從用戶的錢中抽取一定比例的費用,也沒有第三方規定用戶能做什么。然而,因為大多數錢包都是“自我托管”的(只有用戶自己可以訪問),用戶需要管理自己的密鑰。如果出錯,不會得到其他人的幫助和支持。
這意味著用戶必須安全地保存密鑰。不要將它們以明文形式存儲在自己的電腦上,它們可能會被黑客竊取。也不要把密鑰寫在別人能看到的地方。Web3沒有重置密碼,如果丟失它們,可能會失去一切。因此可以看到Web3登錄問題所在。
除了面臨自我托管的挑戰之外,用戶還需要了解代幣和支付。例如,如何支付交易費用?需要什么代幣?如何從法定貨幣轉向代幣?一旦有了代幣,將如何轉移它們?如果在發送代幣的時候出錯,那么它們可能永遠消失了。因此,可以再次了解這一切有多困難。
考慮到所有這些障礙,因此很容易理解為什么許多用戶沒有完成登錄Web3應用程序的第一步。
二、托管錢包出色的用戶體驗,但缺乏所有權
開發人員試圖用托管數字錢包來解決這個問題。這些錢包為用戶管理密鑰,有很多好處。
注冊很容易。用戶可以像使用傳統服務一樣使用電子郵件和密碼,其余的由數字錢包提供商負責。如果用戶丟失了登錄憑證,其密鑰仍然可以在提供商的服務器上訪問,用戶也可以簡單地請求重置密碼。由于錢包軟件運行在他們的服務器上,供應商甚至可以支付交易費用。用戶不需要理解代幣、資金和轉賬。
但正如Web3所說:“不是你的密鑰,就不是你的錢!”雖然托管數字錢包解決了許多登錄問題,但錢包提供商最終擁有密鑰。而現在回到了想要擺脫的問題:一個中心化的實體可以阻止用戶使用自己的代幣,可以隨心所欲地關閉用戶的賬戶,或者取走用戶的資金。
如果你能兩全其美,那不是很好嗎?
三、拯救賬戶抽象
帳戶抽象解決了區塊鏈網絡的一個基本問題:外部擁有的帳戶和合同帳戶之間的區別。
外部擁有的帳戶(EOA)是由用戶使用私鑰控制的帳戶,這些是在上面談到的傳統的Web3錢包。外部擁有的帳戶(EOA)有一個公共地址,并通過區塊鏈發起交易(例如發送代幣)。
合約賬戶(也只是一個智能合約)是一個部署在鏈上并由網絡節點執行的程序。合同賬戶不會啟動交易。與其相反,它們用自己的動作響應交易。它們沒有私鑰,由自己的代碼控制。這種類型的賬戶可以說是擁有應用程序托管。
帳戶抽象將應用程序托管和自我托管結合到一個新的用戶體驗(UX)中,為用戶提供兩者的好處:控制他們的錢包,同時抽象錢包(區塊鏈)。
在流量上,帳戶抽象是使用混合托管的無錢包登錄的基礎。
四、混合托管讓你兩全其美
無錢包登錄允許開發人員為用戶創造近乎無縫的登錄體驗。
混合托管模型使用帳戶抽象來允許帳戶委托,其中子帳戶通過Capability將控制權委托給父帳戶,在本質上允許一個帳戶控制另一個帳戶。
現在,自我托管帳戶可以是父帳戶,為應用程序帳戶授予權限,而應用程序帳戶現在是子帳戶。有了這樣的設置,應用程序帳戶可以協同工作,應用程序可以這樣工作:
應用程序為用戶創建錢包。這里沒有登錄的障礙——沒有密鑰管理,沒有簽名交易,也不了解區塊鏈。用戶可以使用應用程序購買和出售資產,而無需了解或關心技術細節。用戶的應用程序甚至可以補貼交易費用,或者讓他們用美元等法定貨幣為賬戶提供資金。這一切對用戶來說都是不可見的。
一旦用戶帶著自己的錢包管理賬戶回來,其應用程序可以授權訪問用戶的賬戶。一旦鏈接,用戶就擁有了混合托管權力——他們的錢包管理著他們的主賬戶(現在是“父賬戶”),這個主賬戶維護著對應用程序創建的賬戶(現在是“子賬戶”)的訪問。
由于用戶的主賬戶現在可以訪問應用程序創建的賬戶,他們可以將應用程序資產帶到錢包管理的賬戶所在的任何地方。他們可以在市場上交易應用資產,或者與朋友分享。然而,與此同時,由于應用程序也可以訪問帳戶,它仍然可以為代表他們的行為提供無縫的用戶體驗。
使用這種混合托管模型,用戶可以立即體驗應用程序,障礙最小,并且沒有風險。在此之后,如果他們愿意,可以自己控制自我托管賬戶,享受它帶來的所有真正的所有權和自我主權。
五、混合保管和賬戶抽象的技術細節
1.創建賬戶
這一切是如何運作的呢?
在以太坊和許多其他區塊鏈網絡上,EOA是從公鑰創建的。該密鑰被散列,該散列的前160位成為該密鑰控制的帳戶的地址。這使得帳戶創建獨立于網絡,但不可撤銷地將帳戶與該密鑰綁定在一起。
流量使用一個特定的鏈上函數來創建帳戶地址。然后,用戶可以向流量帳戶添加任意數量的密鑰,并根據每個密鑰的保管人添加和刪除訪問權限。這意味著需要一個交易來創建一個新地址。所以用戶不能離線創建賬戶,但這也使流量帳戶的所有權更加靈活。
用戶可以在GitHub上看到一個完整的帳戶創建示例,先看看這里的關鍵部分:
JavaScript
1 userPrivateKey := examples.RandomPrivateKey()
2 userPublicKey := flow.NewAccountKey().
3 FromPrivateKey(userPrivateKey).
4 SetHashAlgo(crypto.SHA3_256).
5 SetWeight(flow.AccountKeyWeightThreshold)
6
7 serviceAccountAddress, serviceAccountKey, serviceSigner :=
8 examples.ServiceAccount(flowClient)
9
10 createAccountTx, _ := templates.CreateAccount(
11 []*flow.AccountKey{userPublicKey},
12 nil,
13 serviceAccountAddress
14 )
15
16 createAccountTx.SetProposalKey(
17 serviceAccountAddress,
18 serviceAccountKey.Index,
19 serviceAccountKey.SequenceNumber
20 )
21
22 createAccountTx.SetReferenceBlockID(
23 examples.GetReferenceBlockId(flowClient)
24 )
25
26 createAccountTx.SetPayer(serviceAccountAddress)
27
28_ = createAccountTx.SignEnvelope(
29 serviceAccountAddress,
30 serviceAccountKey.Index,
31 serviceSigner
32 )
33_ = flowClient.SendTransaction(ctx, *createAccountTx)
首先,用戶創建一個密鑰對。這是很基本的事項。
因為在流量上,用戶通過發送帳戶創建交易來創建帳戶,所以需要一個現有帳戶來發送這一交易。這是ServiceAccount的工作。
createAccountTx接收用戶的公鑰,以便稍后控制新帳戶,但是ServiceAccount(為交易簽名并付款)處理其余的工作。在用戶的應用程序中,將擁有這個服務帳戶,這樣就可以代表用戶簽署帳戶創建交易,也為帳戶創建提供資金。
2.混合托管
回到混合托管模式。應用程序可以為用戶創建應用程序帳戶,并將它們鏈接到其應用程序控制的公鑰。然后,應用程序可以處理用戶的交易和資產,甚至贊助他們的交易費用,就像任何托管賬戶一樣。
稍后,當用戶決定深入Web3生態系統并獲得自己的錢包時,可以創建并保存指向應用程序托管帳戶的AuthAccount Capability的鏈接,并將控制權委托給用戶的錢包管理帳戶。
用戶可以在無錢包登錄示例中看到這樣的示例,其中應用程序執行多重簽名交易,將用戶的帳戶鏈接到無錢包的登錄,dapp托管的帳戶到簽名用戶的錢包管理帳戶。
六、結語
需要強調的是,在應用程序創建的帳戶上授權訪問是通過帳戶上的鏈接Capability完成的,然后將其提供給用戶。對于區塊鏈帳戶來說,這種帳戶委托機制是全新的,它之所以成為可能,是因為多年來流量原生的帳戶抽象。這種語言API賬戶鏈接功能對于流量上的賬戶來說是一個巨大的優勢,此外還有許多其他功能——m-of-n多重簽名、賬戶密鑰更新等等,這些功能現在才開始在其他鏈上實現,它們都是新生的、非本地的賬戶抽象實現。
帳戶抽象是一個強大的特性。在流量上,它支持混合托管模型,允許用戶在注冊時享受托管帳戶的好處,同時允許他們隨時將帳戶納入自我托管。這是一種全新的顯著改進的用戶體驗,有望為Web3帶來數百萬用戶。
原文鏈接:https://dzone.com/articles/solving-web3-onboarding-with-account-abstraction-a