ref: https://medium.com/geekculture/kubestack-a-must-use-117a32efd427
本篇文章要介紹的是一個基於整合 IaC 的 GitOps 開源專案 Kubestack
過往探討到 GitOps 時總是會圍繞如何透過有效的管理與部署 Kubernetes 上的應用程式,譬如 ArgoCD, Flux, Rancher Fleet 等。
當然 GitOps 本身也是一個沒有標準做法的文化與概念,自行透過 Gitlab, Git 等方式也是有辦法實作出相同概念的解決方式。
而 Kubestack 則是一個專注於 Kubernetes 本身的 GitOps 解決方案,而非一般來探討的應用程式。
其本身的架構是基於 Terraform 之上, 因此 Kubestack 本身也自行實作了屬於自己的 Terraform Provider 讓所有對 Terraform 的使用者可以更快上手與使用。
雲端整合方面, Kubestack 整合了 AKS,EKS,以及 GKE,這意味使用者可以輕鬆地透過 Kubestack 來創建這些由雲端企業管理的 Kubernetes 叢集。
除了雲端之外, Kubestack 也支援本地機器的 Kubernetes 叢集,其透過 KIND 的方式於本地端架設一個簡易的模擬環境,可以讓使用者再將修改給合併到真正的 Git 時先行於本地端進行測試,確保一切都沒有問題才會合併。
本文後半部分是一個手把手的教學範例,示範如何透過 Kubestack 來玩耍,同時也提到官網也有滿直覺的教學跟介紹,對於如何使用 GitOps/Terraform 來管理 AKS/GKE/EKS 的使用者也許可以參考看看這個專案
同時也有3部Youtube影片,追蹤數超過5萬的網紅adornAddiction,也在其Youtube影片中提到,材料、工具、MUSIC ⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣ 請 按 S H O W M O R E 查 詢 ⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣& 材料: 皺紙 (文具店) 園藝鐵線 (花店) 園藝紙膠帶 (花店) 透明包裝紙 ($12店) 米白紙卷 (ikea) 工具: 熱溶膠、熱溶膠槍 (雜貨鋪) Disclai...
「git教學」的推薦目錄:
- 關於git教學 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於git教學 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於git教學 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於git教學 在 adornAddiction Youtube 的最讚貼文
- 關於git教學 在 Dr_Minn Youtube 的精選貼文
- 關於git教學 在 ERNEST案內所 Youtube 的最佳貼文
- 關於git教學 在 [分享] 自己錄了git 教學影片- 看板Soft_Job - 批踢踢實業坊 的評價
- 關於git教學 在 Git 與Github 版本控制基本指令與操作入門教學 的評價
- 關於git教學 在 Git與GitHub介紹,軟體版本控制基本教學|ALPHA Camp Blog 的評價
- 關於git教學 在 Github基本使用教學– 將你的NVIDIA機器學習專案都記錄起來吧! 的評價
- 關於git教學 在 [Git][教學] 02. 開始使用GitHub, 註冊與建立repo。 - 進度條 的評價
- 關於git教學 在 Git-Tutorials 基本使用教學 - GitHub 的評價
- 關於git教學 在 Git 教學和GitHub 設定指引 的評價
- 關於git教學 在 Git - Git 與Github 版本控制超簡易教學 的評價
- 關於git教學 在 2013 中央資工網頁設計比賽- Git & GitHub教學 的評價
- 關於git教學 在 Git 學習筆記(四) : GitHub 基本用法 - 小狐狸事務所 的評價
- 關於git教學 在 #分享互動式git 教學-- intergitive - 軟體工程師板 | Dcard 的評價
- 關於git教學 在 [week 1] 版本控制- Git 進階指令& GitHub - 前端新米日記 的評價
- 關於git教學 在 如何使用Visual Studio 將程式碼簽入GitHub 版本控制服務 的評價
- 關於git教學 在 透過界面按鈕就可輕鬆管理Github 中的專案檔案| 梅問題.教學網 的評價
- 關於git教學 在 Linux / Ubuntu : Git / Github 入門(安裝/ 更新/ 登入/ 克隆/ 儲存 ... 的評價
- 關於git教學 在 GitHub入門Part.3 GIT版本控制實作教學 - 布丁布丁吃什麼? 的評價
- 關於git教學 在 git教學(github、gitlab) - TU的雜七雜八筆記本 的評價
- 關於git教學 在 Git 筆記- Git初始設定& Github入門 的評價
git教學 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Optimistic Rollup 就這樣用(2)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC721 的儲值、轉移與提領
TL;DR
本文會跳過 Optimistic Rollup 的介紹而直接實際演示,關於 Optimistic Rollup 的概念與設計原理筆者將在日後另撰文說明,有興趣的讀者可以先參考下列三篇文章(由淺入深):1. OVM Deep Dive 2. (Almost) Everything you need to know about Optimistic Rollup 3. How does Optimism’s Rollup really work?
本文將演示一個 Optimism Rollup 的 ERC721 範例,程式碼在這裡。
本演示大量參考了以下範例:Optimistic Rollup Example: ERC20。
本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
環境設置
Git
Node.js
Yarn
Docker
Docker-compose
筆者沒有碰到環境相容問題,但是建議都升到最新版本, Node.js 使用 v16.1.0 或以上版本
Optimism 服務啟動
有關 Optimisim 的所有服務,都包裝在 Optimism 這個超大專案當中了,直接使用原始碼進行組建:
$ git clone git@github.com:ethereum-optimism/optimism.git$ cd optimism$ yarn$ yarn build
組建完成後,就可以在本機啟動服務了:
$ cd ops$ docker-compose build$ docker-compose up
這個指令會啟動數個服務,包括:
L1 Ethereum Node (EVM)
L2 Ethereum Node (OVM)
Batch Submitter
Data Transport Layer
Deployer
Relayer
Verifier
Deployer 服務中的一個參數要特別注意: FRAUD_PROOF_WINDOW_SECONDS,這個就是 OPtimistic Rollup 的挑戰期,代表使用者出金(Withdraw)需等候的時長。在本篇演示中預設為 0 秒。
如果有需要重啟,記得把整個 Docker Volume 也清乾淨,例如: docker-compose down -v
Optimism 整合測試
在繼續接下來的演示之前,我們需要先確認 Optimism 是否有順利啟動,特別是 Relayer 是否運作正常,因此我們需要先進行整合測試:
$ cd optimism/integration-tests$ yarn build:integration$ yarn test:integration
確保 L1 <--> L2 Communication 相關測試通過後再繼續執行接下來的演示內容。
啟動服務及部署合約需要花費一些時間,運行一段時間(約 120 秒)之後再執行測試,如果測試結果全部皆為 Fail,可能是 Optimism 尚未啟動完成,再等待一段時間即可。
ERC721 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC721 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc721 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc721.git$ cd optimistic-rollup-example-erc721$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC721,部署於 L1
L2DepositedEERC721,部署於 L2
OVM_L1ERC721Gateway,部署於 L1
OVM_L1ERC721Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
OVM_L1ERC20Gateway 目前沒有 Optimism 的官方實作,本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC721...L1 ERC2721 Contract Address: 0xFD471836031dc5108809D173A067e8486B9047A3Deploying L2 ERC721...L2 ERC721 Contract Address: 0x09635F643e140090A9A8Dcd712eD6285858ceBefDeploying L1 ERC721 Gateway...L1 ERC721 Gateway Contract Address: 0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547ccInitializing L2 ERC721...
ERC721 鑄造、儲值、轉移與提領
鑄造(L1)
初始狀態如下,所有帳戶皆尚未持有任何代幣:
接下來,我們將鑄造 2 個代幣以進行接下來的演示。首先,進入 ETH(L1) 的 Console:
$ npx hardhat console --network ethWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat ETH Console
> let accounts = await ethers.getSigners()
> let deployer = accounts[0]
> let user = accounts[1]
取得 ERC721 及 OVM_L1ERC721Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC721_abi = await artifacts.readArtifact("ExampleToken").then(c => c.abi)
> let ERC721 = new ethers.Contract("0xFD471836031dc5108809D173A067e8486B9047A3", ERC721_abi)
> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC721Gateway").then(c => c.abi)
> let Gateway = new ethers.Contract("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", Gateway_abi)
鑄造兩個 ERC721 代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).mintToken(deployer.address, "foo")
{ hash: "...", ...}
> await ERC721.connect(deployer).mintToken(deployer.address, "bar")
{ hash: "...", ...}
只有合約的 Owner(deployer) 可以進行鑄造的操作。
確認 Deployer 餘額:
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x02', _isBigNumber: true } // 2
確認代幣的 TokenID 與 Owner:
> await ERC721.connect(deployer).ownerOf(1)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
> await ERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
儲值(L1 => L2)
完成以上步驟後,目前的狀態如下:
接下來,授權 OVM_L1ERC721Gateway使用 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).approve("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", 2)
{ hash: "...", ...}
在 OVM_L1ERC721Gateway 合約呼叫 Deposit,儲值 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(2)
{ hash: "...", ...}
我們可以到 Optimism (L2) 的 Console 確認入金是否成功:
$ npx hardhat console --network optimismWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat Optimism Console
> let accounts = await ethers.getSigners()
> let deployer = accounts[0]
> let user = accounts[1]
取得 L2DepositedERC721 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC721_abi = await artifacts.readArtifact("OVM_L2DepositedERC721").then(c => c.abi)
> let L2DepositedERC721 = new ethers.Contract("0x09635F643e140090A9A8Dcd712eD6285858ceBef", L2ERC721_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
ERC721 轉移(L2 <=> L2)
完成以上步驟後,目前的狀態如下:
接下來,我們在 L2 從 Deployer 轉移代幣給 User:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true } // 0
> await L2DepositedERC721.connect(deployer).transferFrom(depoyer.address, user.address, 2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
ERC721 提領(L2 => L1)
完成以上步驟後,目前的狀態如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC721 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).withdraw(2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,最終狀態應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC721 L1 => L2 的儲值(Deposit)
ERC721 L2 帳戶之間轉移(Transfer)
ERC721 L2 => L1 的提領(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如支援其他標準的合約如 ERC1155,以及如何運行 Optimistic Rollup 生態系中最重要的驗證者(Verifier),敬請期待。
參考資料
OVM Deep Dive
(Almost) Everything you need to know about Optimistic Rollup
How does Optimism’s Rollup really work?
Optimistic Rollup Official Documentation
Ethers Documentation (v5)
Optimistic Rollup Example: ERC20(Github)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Proof-of-concept ERC721 Bridge Implementation (Github)
Optimistic Rollup 就這樣用(2) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
git教學 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Optimistic Rollup 就這樣用(1)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC20 的入金、轉帳與出金
TL;DR
本文會跳過 Optimistic Rollup 的介紹而直接實際演示,關於 Optimistic Rollup 的概念與設計原理我將在日後另撰文說明,有興趣的讀者可以先參考下列三篇文章(由淺入深):1. OVM Deep Dive 2. (Almost) Everything you need to know about Optimistic Rollup 3. How does Optimism’s Rollup really work?
本文將演示一個 Optimism Rollup 範例,程式碼在這裡。
本演示大量參考了以下這兩個官方範例:optimism-tutorial、l1-l2-deposit-withdrawal。
環境設置
Git
Node.js
Yarn
Docker
Docker-compose
筆者沒有碰到環境相容問題,但是建議都升到最新版本, Node.js 使用 v16.1.0 或以上版本
Optimism 服務啟動
有關 Optimisim 的所有服務,都包裝在 Optimism 這個超大專案當中了,直接使用原始碼進行組建:
$ git clone git@github.com:ethereum-optimism/optimism.git$ cd optimism$ yarn$ yarn build
組建完成後,就可以在本機啟動服務了:
$ cd ops$ docker-compose build$ docker-compose up
這個指令會啟動數個服務,包括:
L1 Ethereum Node (EVM)
L2 Ethereum Node (OVM)
Batch Submitter
Data Transport Layer
Deployer
Relayer
Verifier
Deployer 服務中的一個參數要特別注意: FRAUD_PROOF_WINDOW_SECONDS,這個就是 Optimistic Rollup 的挑戰期,代表使用者出金(Withdraw)需等候的時長。在本篇演示中預設為 0 秒。
如果有需要重啟,記得把整個 Docker Volume 也清乾淨,例如: docker-compose down -v
Optimism 整合測試
在繼續接下來的演示之前,我們需要先確認 Optimism 是否有順利啟動,特別是 Relayer 是否運作正常,因此我們需要先進行整合測試:
$ cd optimism/integration-tests$ yarn build:integration$ yarn test:integration
確保 L1 <--> L2 Communication 相關測試通過後再繼續執行接下來的演示內容。
啟動服務及部署合約需要花費一些時間,運行一段時間(約 120 秒)之後再執行測試,如果測試結果全部皆為 Fail,可能是 Optimism 尚未啟動完成,再等待一段時間即可。
ERC20 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC20 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc20 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc20.git$ cd optimistic-rollup-example-erc20$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC20,部署於 L1
L2DepositedEERC20,部署於 L2
OVM_L1ERC20Gateway,部署於 L1
其中,ERC20 與 L2DepositedERC20 是由上面的範例專案編譯的,可以直接在範例專案中直接取得 ABI;而 OVM_L1ERC20Gateway 則是由 Optimism 編譯的,屬於 Optimistic Rollup 協定的一部分,無法直接在範例專案中取得 ABI。
因此在部署以上三個合約前,我們需先手動將 OVM_L1ERC20Gateway 編譯後的生成品 (Artifacts)——即 ABI,複製到此專案中:
$ cp -r ~/projects/optimism/packages/contracts/artifacts/contracts/optimistic-ethereum/OVM/bridge/tokens/OVM_L1ERC20Gateway.sol ~/projects/optimistic-rollup-example-erc20/artifacts/contracts/
OVM_L1ERC20Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC20...Deploying L1 ERC20...L1 ERC20 Contract Address: 0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20fDeploying L2 ERC20...L2 ERC20 Contract Address: 0x67d269191c92Caf3cD7723F116c85e6E9bf55933Deploying L1 ERC20 Gateway...L1 ERC20 Gateway Contract Address: 0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07Initializing L2 ERC20...
ERC20 入金、轉帳與出金
ERC20 入金(L1 => L2)
目前餘額:
在合約部署完成後,Deployer 是目前唯一有資金的帳戶,接下來我們就進行入金(Deposit),將 Deployer 的資金從 L1 搬到 L2。
首先,進入 ETH(L1) 的 Console:
$ npx hardhat console --network ethWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat ETH Console
> let accounts = await ethers.getSigners()> let deployer = accounts[0]> let user = accounts[1]
取得 ERC20 及 OVM_L1ERC20Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC20_abi = await artifacts.readArtifact("ERC20").then(c => c.abi)> let ERC20 = new ethers.Contract("0x1429859428C0aBc9C2C47C8Ee9FBaf82cFA0F20f", ERC20_abi)> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC20Gateway").then(c => c.abi)> let Gateway = new ethers.Contract("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", Gateway_abi)
先授權 OVM_L1ERC20Gateway 花費 ERC20:
// In Hardhat ETH Console
> await ERC20.connect(deployer).approve("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", 10000)> await ERC20.connect(user).approve("0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", 10000)
注意:Deployer 及 User 都需要對 OVM_L1ERC20Gateway 進行授權,否則在接下來的出金步驟時 Relayer 會出錯
接著,在 OVM_L1ERC20Gateway 合約呼叫 Deposit:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(1000)
我們可以到 Optimism (L2) 的 Console 確認入金是否成功:
$ npx hardhat console --network optimismWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat Optimism Console
> let accounts = await ethers.getSigners()> let deployer = accounts[0]> let user = accounts[1]
取得 L2DepositedERC20 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC20_abi = await artifacts.readArtifact("L2DepositedERC20").then(c => c.abi)> let L2DepositedERC20 = new ethers.Contract("0x67d269191c92Caf3cD7723F116c85e6E9bf55933", L2ERC20_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(deployer).balanceOf(deployer.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
ERC20 轉帳(L2 <=> L2)
完成以上步驟後,目前的餘額如下:
接下來,我們在 L2 從 Deployer 轉移一部分資金給 User:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x00', _isBigNumber: true } // 0> await L2DepositedERC20.connect(deployer).transfer(user.address, 1000){ hash: "..." ...}> await L2DepositedERC20.connect(wallet_1).balanceOf(user.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
ERC20 出金(L2 => L1)
完成以上步驟後,目前的餘額如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC20 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC20.connect(user).withdraw(1000){ hash: "..." ...}> await L2DepositedERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC20.connect(user).balanceOf(user.address)BigNumber { _hex: '0x03E8', _isBigNumber: true } // 1000
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,餘額應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC20 L1 => L2 的入金(Deposit)
ERC20 L2 帳戶之間轉帳(Transfer)
ERC20 L2 => L1 的出金(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如 ERC721 / ERC1155 的使用方式,敬請期待。
參考資料
OVM Deep Dive
(Almost) Everything you need to know about Optimistic Rollup
How does Optimism’s Rollup really work?
Optimistic Rollup Official Documentation
Ethers Documentation (v5)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Optimistic Rollup 就這樣用(1) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
git教學 在 adornAddiction Youtube 的最讚貼文
材料、工具、MUSIC
⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣ 請 按 S H O W M O R E 查 詢 ⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣&
材料:
皺紙 (文具店)
園藝鐵線 (花店)
園藝紙膠帶 (花店)
透明包裝紙 ($12店)
米白紙卷 (ikea)
工具:
熱溶膠、熱溶膠槍 (雜貨鋪)
Disclaimer:
- This is NOT a sponsored video
✂️ 更 多 D I Y 教 學 : ✂️
⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣
https://goo.gl/c6RDVV
? 更 多 手 帳 影 片 : ?
⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣
https://goo.gl/CdZiYQ
---
? Follow me on ?
▪️ Instagram | http://instagram.com/adornAddiction
▪️ Blog | http://www.adornAddiction.com
▪️ Facebook | https://www.facebook.com/adornAddiction/
▪️ Address | To adornAddiction arco City, 18/F, East Town Building, 41 Lockhart Road, Wan Chai, Hong Kong
▪️ 地址 | arco City 灣仔駱克道41號東城大廈18樓 adornAddiction收
---
? Music ?
► Oceanside by Scandinavianz https://soundcloud.com/scandinavianz
Creative Commons — Attribution 3.0 Unported — CC BY 3.0
http://creativecommons.org/licenses/b...
Music promoted by Audio Library https://youtu.be/Sx2gncC4yNY
► Jellyfish by Declan DP & KODOMOi https://soundcloud.com/declandp
Licensing Agreement 2.0 (READ)
http://www.declandp.info/music-licensing
Music promoted by Audio Library https://youtu.be/fgdrHffROpo
► New Day by Mona Wonderlick https://soundcloud.com/monawonderlick
Creative Commons — Attribution 3.0 Unported — CC BY 3.0
http://creativecommons.org/licenses/b...
Music promoted by Audio Library https://youtu.be/d8DhmLCv9ls
► Tropical Traveller by Del. https://soundcloud.com/del-sound
Creative Commons — Attribution-ShareAlike 3.0 Unported — CC BY-SA 3.0
http://creativecommons.org/licenses/b...
Music promoted by Audio Library https://youtu.be/wfyUZvXo7p4
git教學 在 Dr_Minn Youtube 的精選貼文
▍1.4.0.2.32448 版本內的壁壘機兵在多拉多地圖的某個螢幕上會聽到bb聲,現在已經被拿掉。
▶中文簡易解說:http://j.mp/2eAPEn8
▶中文詳細解說:http://j.mp/2edCChn
▶03:24 - 摩斯密碼:http://j.mp/2eAQ3pK
▶03:30 - 維吉尼亞密碼:http://j.mp/2edAQwK
▶04:23 - 電話密碼:5-2-4-1-3 | 23-4-14-8-6-18-17-23-21-18-15(可對應英文字母順序),後半部得到WDNHFRQWURO,使用23帶入凱薩密碼破解:TAKECONTROL
▶04:59 - 隱藏訊息需要使用Columnar密碼破解(http://j.mp/2edCChn)
▶05:41 - 如果前往 https://lumerico.mx/president-bypass/.git/ 這個網站會出現錯誤訊息,但可用工具解出以下檔案:
https://lumerico.mx/president-bypass/.git/config
https://lumerico.mx/president-bypass/.git/index
https://lumerico.mx/president-bypass/.git/HEAD
參考資料:
http://j.mp/2eBo6xY
http://j.mp/2eBnSHd
▶Facebook(http://facebook.com/cooMaster88)
▶訂閱Youtube
▶聯絡E-Mail:cooMaster@outlook.com
以FPS遊戲為主的遊戲頻道,提供第一手的射擊遊戲資訊與評論。
只要有槍可打,就有苦大師。
git教學 在 ERNEST案內所 Youtube 的最佳貼文
➡︎ 我的Youtube賺錢方法:http://goo.gl/zNT6Ck
出街大便 5 步曲|揭開痾屎的隱世秘密
人有三急係人之常情,急尿小事啦,廁所遠咩?搵個樽痾就搞撚掂。
不過急屎就非同小可,輕則成地K粒,重則決堤忽必裂。係街急屎對於某啲人嚟講係惡夢,有啲朋友甚至話係屋企先痾到屎,我要顛覆呢個腐敗嘅思想,揭開痾屎嘅隱世秘密-出街大便 5 步曲!
一入廁格你會見到尿滲嘅行跡
未沖嘅一篤尿 有一半機會呢啲位會有屎跡
1.大便前抆出厚厚的廁紙用腳抹去地下的尿
2.大便前用廁紙抹下廁板
3.大便前請沖廁
4.大便前用3-5張兩格廁紙舖好廁板
5.大便前用適量廁紙掉落屎坑
做完呢 5 步曲你就可以安心痾屎喇。
唔知大家有冇試過呢 5步曲,如果有,留言話我知,如果冇,留言話我知你出街大便嘅不二法門!如果鐘意我呢條片嘅,記得subscribe我個channel喇,我地下條片見!88!
想留意更多我的動態,記得緊貼Ernest DoCRAZY
Ernest DoCRAZY社交平台:
Ernest DoCRAZY channel:
https://www.youtube.com/c/ErnestDoCRAZYTV
Ernest DoCRAZY facebook:
https://www.facebook.com/ErnestDoCRAZY/
Ernest DoCRAZY instagram:
https://www.instagram.com/ernest_pch/
Related:
https://www.youtube.com/watch?v=Git-Nt8TdyE
https://www.youtube.com/watch?v=OWaZofvse4A
https://www.youtube.com/watch?v=eR8jU62rCvY
大便,大便前,出街,出街大便,大便5步曲,屎,痾屎,急尿,急屎,秘密,廁所,廁紙,教學,尿,搞笑,DoCRAZY videos,Do CRAZY,Ernest,搞笑問題,生活問題,funnies,funny,fun
git教學 在 Git 與Github 版本控制基本指令與操作入門教學 的推薦與評價
Git 是一個分散式版本控制軟體,最初由Linus Torvalds 創作(也是作業系統Linux 系統的開發者),其最初目的是為更好地管理Linux kernel 開發而設計,其 ... ... <看更多>
git教學 在 Git與GitHub介紹,軟體版本控制基本教學|ALPHA Camp Blog 的推薦與評價
Git 和GitHub 是什麼?軟體開發常聽到的這兩個名詞有什麼關係?這篇Git和GitHub教學,將介紹工程師必備技能「版本控制系統」Git,還有以Git 為核心 ... ... <看更多>
git教學 在 [分享] 自己錄了git 教學影片- 看板Soft_Job - 批踢踢實業坊 的推薦與評價
之前貼在 programming 版上,有人提這裡可以貼就貼過來了
--
總之在去年年底錄了一系列 git 教學的影片
本來是因為要教公司同事,後來覺得太麻煩,錄個影片也不錯
弄一弄弄成一系列的影片
Blog:
https://yodalee.blogspot.tw/2017/12/git-video.html
Youtube 播放列表連結:
https://goo.gl/b5sFtj
希望對大家有幫助這樣
--
______ |\
/ \ | \
/ ● ● \ |__\
/ ______ \ |
/ \__/ \___|
/______________\ |
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.248.249
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1514902856.A.688.html
... <看更多>