使用 Web3.js 操作 zkSync Paymaster
在之前的文章 Solidity - zkSync Paymaster 程式範例說明了如何撰寫和部署 Paymaster 合約,也有使用 Paymaster 發起交易的方法。不過專案是用 zksync-cli 建立,使用的是 Ethers.js v5 的版本。這篇文章會說明如何在 Web3.js 的專案中使用,本篇文章使用 Web3.js 4.2.2 版本。 zksync 套件zkSync 提供了官方的套件 zksync2-js 可以用來處理 Paymaster 相關的交易。但是該套件使用 Ethers.js 做為底層來開發,使用這套件等於要同時使用 Ethers.js。我這裡依據官方原始碼改寫了一份 Web3.js 版本的,可直接加入專案使用,就不用和 Ethers.js 混合使用。例如儲存為 paymaster-utils.ts: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686 ...
使用 Ethers.js 操作 zkSync Paymaster
在前一篇文章 Solidity - zkSync Paymaster 程式範例說明了如何撰寫和部署 Paymaster 合約,也有使用 Paymaster 發起交易的方法。不過專案是用 zksync-cli 建立,使用的是 Ethers.js v5 的版本。這篇文章會以如何在 Dapp 中,使用現成 Paymaster 的角度來說明。包含 Ethers.js v5 和 v6 的用法。 使用 zksync 套件和連接錢包等說明,參考之前的文章使用 Ethers.js 操作 zkSync 帳戶抽象,這邊不重複說明。 產生 Paymaster 參數使用 Paymaster 發送交易要在交易中帶入 Paymaster 相關參數,可以使用套件中提供的方法: 1utils.getPaymasterParams(paymasterAddress: string, paymasterInput: PaymasterInput): PaymasterParams paymasterAddress: Paymaster 合約地址。 paymasterInput: Paymaster 使用的類型和參數,目 ...
Solidity - zkSync Paymaster 程式範例
之前文章 zkSync 帳戶抽象 (Account Abstraction) 程式範例說明了 zkSync Era 帳戶抽象的用法,這篇繼續說明另一個 EIP-4337 的擴充功能 - Paymaster。這在 zkSync Era 中也有原生的支持。雖然是帳戶抽象中的擴充功能,實際上並不是只有抽象帳戶才能使用,EOA 帳戶也能使用,是一個獨立的模組。 說明Paymaster 主要的功能是能自訂交易發起人的 Gas 手續費支付方式。以往錢包需要 ETH 才能發送交易,透過 Paymaster 的機制可以解決這問題,可以用各種自訂的方式來代為支付 Gas。例如使用 USDC 等代幣來支付,甚至是免費代為支付。 運作機制是需要先使用智能合約實作 Paymaster,在合約中定義支付的方式,最後在發起的交易 Tx 中指定要使用的 Paymaster。 要實作一個 Paymaster,必須實作的介面如下: 123456789101112131415161718interface IPaymaster { // 主要驗證和支付的邏輯 function validateAndPayF ...
使用 Web3.js 操作 zkSync 帳戶抽象
在之前的文章 zkSync 帳戶抽象 (Account Abstraction) 程式範例說明了如何撰寫和部署帳戶抽象合約,也有使用抽象帳戶發起交易的方法。不過專案是用 zksync-cli 建立,使用的是 Ethers.js v5 的版本。這篇文章會說明如何在 Web3.js 的專案中使用,本篇文章使用 Web3.js 4.2.2 版本。 zksync 套件zkSync 提供了官方的套件 zksync2-js 可以用來處理帳戶抽象相關的交易。但是該套件使用 Ethers.js 做為底層來開發,使用這套件等於要同時使用 Ethers.js。我這裡依據官方原始碼改寫了一份 Web3.js 版本的,可直接加入專案使用,就不用和 Ethers.js 混合使用。例如儲存為 eip712-signer.ts: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 ...
使用 Ethers.js 操作 zkSync 帳戶抽象
在前一篇文章 zkSync 帳戶抽象 (Account Abstraction) 程式範例說明了如何撰寫和部署帳戶抽象合約,也有使用抽象帳戶發起交易的方法。不過專案是用 zksync-cli 建立,使用的是 Ethers.js v5 的版本。這篇文章會以如何在 Dapp 中,使用現成抽象帳戶的角度來說明。包含 Ethers.js v5 和 v6 的用法,以及實際使用 Metamask 連接使用效果。 zksync 套件zkSync 提供了官方的套件可以用來處理帳戶抽象相關的交易,原先的版本為 zksync-web3,新的版本更名為 zksync2-js。分別對應到 Ethers.js v5 和 v6。 Ethers.js v5:使用 zksync-web3。 Ethers.js v6:使用 zksync2-js。 連接錢包首先要連接錢包,即為後續程式中的 signer 和 provider 的取得方式。 v6私鑰錢包12345import { Provider, Wallet } from 'zksync2-js';const private ...
Solidity - zkSync 帳戶抽象 (Account Abstraction) 程式範例
簡介zkSync Era 原生支援帳戶抽象 (Account Abstraction) 的功能,這篇文章會簡單介紹一下帳戶抽象是什麼,主要會說明在 zkSync Era 如何實作相關的程式。 帳戶類型在介紹帳戶抽象之前,要先知道目前以太坊有兩種帳戶 外部擁有帳戶,英文為 EOA(Externally Owned Account),也就是一般有私鑰的錢包地址。 智能合約帳戶。 智能合約常會使用 msg.sender 來取得函式呼叫者,進一步作為在系統中的帳號,作為記帳之類的應用。EOA 的一般錢包可以直接發起交易來使用智能合約,而有時我們會使用另外的智能合約間接使用 dapp,例如多簽合約來管理,而這些智能合約帳戶本身無法自己發起交易,必須還是要有一般錢包來代為發送上鏈。 帳戶抽象 (Account Abstraction)現行的帳戶機制存在一些問題,例如 EOA 帳戶私鑰必須保管好不能遺失,智能合約帳戶本身無法自行發起交易等等。帳戶抽象被提出就是為了解決相關的問題的機制,可以參考完整的文件 EIP-4337 和 EIP-2938。網路上已經有很多關於帳戶抽象的介紹,這邊只簡單說明一 ...
Stable Diffusion 教學 - Hires. fix
本篇文章介紹 Stable Diffusion web UI 的 Hires. fix 功能,用來提升圖片的解析度。 原理說明Hires. fix 的原理其實很簡單,利用文生圖產生的圖片,進行放大之後再進行一次圖生圖,流程如下圖所示: 功能區塊在文生圖的頁面,採樣方法的下面可以找到 Hires. fix 的選項,勾起來就可以使用。同時下方會出現一些額外選項: Upscaler這是圖片放大時使用的方法,目前有以下的方法可以選擇 Latent, Latent (antialiased), Latent (bicubic), Latent (bicubic antialiased), Latent (nearest), Latent (nearest-exact), None, Lanczos, Nearest, ESRGAN_4x, LDSR, R-ESRGAN 4x+, R-ESRGAN 4x+ Anime6b, ScuNET, ScuNET PSNR, SwinIR_4x 後面會有實驗結果參考。 Hires steps這是在進行圖生圖階段時使用的 Sampling steps,0 表示 ...
Stable Diffusion 教學 - Tiling
本篇文章介紹 Stable Diffusion web UI 的 Tiling 功能,能用來生成 Tiled Image,可以用來作為背景圖或桌布。 Tiled Image首先要先知道什麼是 Tiled Image,他是一種特殊的紋理圖片,在四個方向重複拼接的時候,能夠無縫接軌,看不出交界。例如下面這張圖片: 往四周重複後 不會看到明顯交接處。 功能區塊在文生圖和圖生圖的頁面,採樣方法的下面可以找到 Tiling 的選項,勾起來就可以使用。 實驗結果Tiling 的功能有時需要比較大的解析度才能正常產生圖片,例如下面產生花的提示詞,分別在不同解析度產生的結果: 256x256 512x512 768x768 可以發現在 256x256 無法正常產生的結果,但並不是一定多少解析度,同樣解析度有時會成功有時會失敗,不過越大成功率越高。下面把上面的三張圖片都拿來展開看看效果: ...
Stable Diffusion 教學 - Restore faces
本篇文章介紹 Stable Diffusion web UI 的 Restore faces 功能,能達到修復臉部的效果。 功能區塊在文生圖和圖生圖的頁面,採樣方法的下面可以找到 Restore faces 的選項,勾起來就可以使用。 設定在設定下的 Face restoration 頁簽,有更多的設定可以使用 Face restoration model主要有兩種 model 可以選擇: CodeFormer GFPGAN 這些模型原本是用來把模糊的照片變清晰,而在文生圖或圖生圖時使用的話,會在產生圖片後進行後處理。 CodeFormer weight使用 CodeFormer 還可設定權重,這邊和直覺相反,數字越大效果越小。可以設定 0 - 1,預設 0.5。 額外設定除了 Face restoration 頁簽外,在 Saving images/grids 頁簽下面還有一個設定和 Restore faces 有關,在下面找到選取方塊 1Save a copy of image before doing face restoration. 勾起後會另外儲存一份處理前 ...
使用 Ethers.js 進行 EIP-712 類型結構化資料簽名
之前在的文章 Solidity 智能合約 - EIP-712 類型結構化資料雜湊和簽名,說明了智能合約如何檢驗 EIP-712 的簽章。這篇文章將說明如何使用 Ethers.js 來進行 EIP-712 簽章。本篇文章使用 Ethers.js 6.7.1 版本。 簽章signer.signTypedDataEthers.js 使用下面函式進行簽署,參考之前的文章使用 Ethers.js 簽章與檢驗取得 Signer。 1signer.signTypedData(domain, types, value): Promise<string> domain: 合約中 eip712Domain 的資料。 types: 類別定義。 value: 訊息內容,直接參考下面範例說明。 回傳值: 為 Promise 物件,內容為簽章。 使用之前的範例合約來說明 12345678910111213141516171819202122232425262728293031323334import "@openzeppelin/contracts/utils/cryptography/ ...





