雖然這篇整合測試c#鄉民發文沒有被收入到精華區:在整合測試c#這個話題中,我們另外找到其它相關的精選爆讚文章
在 整合測試c#產品中有7篇Facebook貼文,粉絲數超過3,460的網紅Taipei Ethereum Meetup,也在其Facebook貼文中提到, 📜 [專欄新文章] Optimistic Rollup 就這樣用(2) ✍️ Juin Chiu 📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium ERC721 的儲值、轉移與提領 TL;...
同時也有1部Youtube影片,追蹤數超過19萬的網紅3Q陳柏惟,也在其Youtube影片中提到,本日外交國防質詢簡單幫大家摘要,有三大點: 第一是 高教機進度 第二是 釋商的人力需求跟考核項目 第三是 魚雷買進來之後的國防軍購規劃 我們自 2016 起「國機國造、自研自製」,「勇鷹」AJT(Advanced Jet Trainer)新式高教機,由空軍、漢翔公司和中科院航空所研發、製造,從整機...
「整合測試c#」的推薦目錄
- 關於整合測試c# 在 離島人|Humans Offshore Podcast Instagram 的最佳解答
- 關於整合測試c# 在 Beauty Review | Bullet Journal Instagram 的最讚貼文
- 關於整合測試c# 在 ?CARTER Instagram 的最佳貼文
- 關於整合測試c# 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於整合測試c# 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於整合測試c# 在 粘拔的幸福碎碎念 Facebook 的精選貼文
- 關於整合測試c# 在 3Q陳柏惟 Youtube 的精選貼文
整合測試c# 在 離島人|Humans Offshore Podcast Instagram 的最佳解答
2021-09-10 22:26:19
⌨️ 聽完週末Robert在離島人的分享後,各位是不是想轉職到海外爽爽躺著賺了呢? 因為科技的發展以及疫情的影響,目前世界各地仍有大量的各種工程師職缺。若有興趣進入這個領域,歡迎參考下面幾個英語平台唷!話說台灣也有很多相關的機構和平台,麻煩👇🏼👇🏼下面留言👇🏼👇🏼讓大家知道你在這唷~ 免費教你學...
整合測試c# 在 Beauty Review | Bullet Journal Instagram 的最讚貼文
2021-08-18 00:23:28
全自購 Brand Focus - 平價護膚品 Good Molecules 斷斷續續試用左大半年,終於可以整合下我用過嘅good molecules 產品😍 Good Molecules 係Beautylish 出嘅牌子,韓國製造,無動物測試,部分產品純素,所有成分都清晰地喺網站同埋包裝標明。更...
整合測試c# 在 ?CARTER Instagram 的最佳貼文
2020-07-03 04:34:43
SHARK RACE R PRO GP 大鴨尾 選手帽 安裝 SENA 10C PRO 藍牙耳機+攝影機 一機完美整合行車錄影+藍牙通訊的騎士裝備 除了循環錄影,還有縮時攝影功能。 最多 4 機連線,最遠距離達 1.6 公里。 充飽電可連續錄影 2 小時,再保留通話 3 小時。 規格 一般 電池...
-
整合測試c# 在 3Q陳柏惟 Youtube 的精選貼文
2020-05-28 22:36:26本日外交國防質詢簡單幫大家摘要,有三大點:
第一是 高教機進度
第二是 釋商的人力需求跟考核項目
第三是 魚雷買進來之後的國防軍購規劃
我們自 2016 起「國機國造、自研自製」,「勇鷹」AJT(Advanced Jet Trainer)新式高教機,由空軍、漢翔公司和中科院航空所研發、製造,從整機外型設計分析、風洞吹試、藍圖繪製、結構測試、地面整合測試、飛試驗證、部分系統件開發、生產製造組裝、地面輔助訓練系統,到整體後勤支援系統,皆由國人自主完成。
日前已知國防部於 6 月進行高教機首飛,因為高教機首飛不僅是成果展示,還要透過試飛做精進和調整的建議基礎。我期望事前準備方面能夠完善、順利,如果有障礙儘速排除。畢竟新式高教機從研發、製造、出廠到現在要首飛,乘載國人很大期待,此外首次試飛,將往量產邁進,未來66架新式高教機是否需要精進、構改,也需要透過測試做調整,盼相關單位不僅將這次的試飛看做是「成果展示」,同時也是改進、修正、除錯的機會。
國防資源因為釋商的關係,我也提出幾項重點,首先我十分關心《國防產業發展條例》配套法規進度,也期望國防部能廣納各界的意見,盡量完善。
我們的釋商金額年年都在增加,事實上包含軍備、科技,都不太可能是一套標準從開始到最後都沒有變動。那制定一個新的東西,我們需要用現況去規劃未來的東西。此外,釋商的金額逐年增加,就表示我們的需求量越來越大,管理的責任越來越重,配合的廠家理論上也會增加,即便廠家未增加,科目也一定變多或金額變大。那安調的人力,就非常重要了,包含保防、管理,有時可能還得去廠家場勘或調查,特別是機敏專案,目前編制 16 個人,16 個人看一千多億的案子,我們的保防編制是否足夠,很值得留意。
最後,近期可以看到一些採購新聞,如 MK-48 AT 重型魚雷的軍購案,媒體也報導了一些可能的採購計畫。針對軍購的問題,我想強調,不論是軍購或是國造,我們都要根據戰略目標、戰術運用,去決定我們需要的武器。
以傳出美國有意汰除的「伯克級(Arleigh Burke Class)神盾驅逐艦」為例,若台灣接手,雖然具備戰力成熟、相對優惠、能一對一汰換基隆級驅逐艦等好處,但也要思考它堪用的服役時間究竟能多久?是否會影響國艦國造政策和艦隊戰力更新時程,以及過去提出的「新一代主戰艦」和研發艦載戰鬥系統的「迅聯專案」?打個比方,我手上有一隻 iPhone 4,現在出到11,但是不知道為什麼,蘋果禁賣 11 給我。我應該用現在的科技,找人生產一隻 iPhone 11 同級品呢?還是直接買人家不用的二手 iPhone 7 ?雖然 iPhone 7 穩定、相容、確定能用、而且比我的 4 好多了,問題是買了可能要換電池,而且其他零組件老化不知道能用多久。而且我拿著 iPhone 7 出去,感覺還是弱一截啊。我找人生產一隻新手機,處理器、相機...都能用最新科技,但後續整合不知道順不順利?而且我真的做得出來嗎?
國防整備的規劃,需要大智慧,期許國防部能運用智慧,好好規劃。
#3Q陳柏惟 #中二立委 #台灣基進
===============================
◆ 訂閱3Q的Youtube → https://www.youtube.com/c/3QChen
◆ 追蹤3Q的FB → https://www.facebook.com/3Q.PehUi/
◆ 追蹤3Q的IG → wondachen
◆ 追蹤3Q的噗浪 → wondachen
◆ 追蹤3Q的推特 → https://twitter.com/wondafrog
===============================
◆ 台灣基進官網 → https://statebuilding.tw/
◆ 訂閱台灣基進官方Youtube → https://pros.is/L8GNN
◆ 追蹤台灣基進官方臉書 → https://www.facebook.com/Statebuilding.tw/
◆ 捐款支持台灣基進 → https://statebuilding.tw/#support
整合測試c# 在 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.
👏 歡迎轉載分享鼓掌
整合測試c# 在 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.
👏 歡迎轉載分享鼓掌
整合測試c# 在 粘拔的幸福碎碎念 Facebook 的精選貼文
衛星資料鏈,絕對不是用阿斗衛星。
日前路透社引述美方六個消息來源,報導稱美國即將對臺灣出售至少4架MQ-9B「海上衛士」(SeaGuardian)大型無人機,以增強臺灣對中共軍事動態的監控能力。
政策調整的試金石
誠如國內媒體報導,我方是在2017年11月的「美台年度國防檢討會議」(DRT)中,正式向美爭取MQ-9無人機系統,並於2018年底開始獲知可考慮出售,而今年1月美臺雙方政府高層取得共識並確定可以「全系統」獲得MQ-9後,軍方才將此案改列優先項目積極推動。
臺灣在四月初就向美方提出了粗估報價的要求,以期國防部能趕在8月下旬前完成(「戰備急需」)建案程序,將MQ-9無人機案正式納入2021年度國防預算,呈送立法院。但數月來美方遲遲一直未提供報價,進入七月後,眼見預算截止期限將屆,軍方日感焦急。
川普政府於7月24日正式宣布調整對無人機系統技術的輸出規範。主要係將「飛彈技術管制制度 」(MTCR) 規定下「第一類技術」(必須管制輸出) 之定義,從任何可攜載500公斤以上籌載飛行超過300公里以上距離之載具縮減為時速800公里以上者,並對一般國家申購無人機的審核指導原則也將從「假定否決」,放寬為「正常審查」。這大大的鬆綁了大型無人機的輸出,不僅有利美國國防廠商拓展海外商機,也為美國政府在此日益關鍵的軍事技術領域提供了更多的政策彈性與外交裕度。這是面對中共這樣大國挑戰者的現實下,美國所決定採取的政策挪移。既符合戰略競爭需要,又不違背MTCR的精神與字面規定。
在這重要政策宣示的一週後的7月31日,美國就向臺灣提交了MQ-9B大型無人機的報價。可見美方遲遲未報價顯然是為了配合政策宣示。這讓對臺灣輸出大型長程的無人機仍得以在符合MTCR規定下遂行,美方堪稱用心良苦。而做為在此範式挪移下的優先適用者與試金石,臺灣或在某種程度上亦可謂 “與有榮焉”。
川普政府雖顯然有意在11月大選前盡可能將對臺灣的軍售全部“清倉”,但可能還是會有一些實際作業進度上的困難有待克服。故M109A6自走榴炮、M142海馬斯多管火箭系統等今年3月初臺灣正式申購(且已編入臺灣2020年度國防預算)的四個項目可能較無問題,但像MQ-9B無人機以及金額數倍於此的魚叉CDCM岸防飛彈系統等案(規劃為2021年度國防預算下新增案)能否趕得及在未來兩三個月內通知國會,則仍須在未來數週內進一步確認。
軍事需求
華府人士透露,台灣軍方高層今年初對於藉由先透過軍購引進大型無人機,迅速建立原先闕如的長程,長持續性情監偵暨目獲能力(ISTAR) 的做法表示認同。臺灣方面並認為這可與中科院自行研發中的「騰雲」無人機 (基本上外型,動力系統,系統概念等均“重度參考”了 MQ-9)並行不悖。
針對外界對MQ-9B這個檔次的無人機在戰時能否存活的質疑,美方專業意見則認為,大型無人機由於可攜載較大較重的感測系統酬載,故能在更遼闊的空域、從更遠的距離外執行偵查、監控與目標辨識等任務,戰時的存活率反而可能猶勝於較小型的載具或(臺灣長期依賴的)地面站臺。而MQ-9B平時的多功能任務彈性、成本效益與政治敏感性/安全性,也都遠比傳統(載人)飛行載具為高。同時,從美方所收到我軍方所提出的任務系統酬載需求來看,臺灣顯然有意藉MQ-9B長達40小時的滯空性能來擔負電子偵查任務,以填補空軍近30年來始終未能籌建的電偵機角色。而戰爭發生前若能精確掌握敵方動態,往往可以藉偵知軍事蠢動徵兆提供充分戰略預警,從而避免衝突爆發。
至於部分評論渲染凸顯MQ-9的「斬首作戰」能力,美方官員認為這根本就不是此案的核心驅動邏輯,有識者毋須畫錯重點。事實上,就臺灣而言,這個檔次的無人機有無武裝固然在能力與任務彈性上有差,但卻無關宏旨。況且,美國也可能考慮將無人機系統與武器部分的軍售分開處理,目前似尚未做出最後決定。
規格與價格
軍方的專業背書顯然與層峰即便在中科院依國防自主政策仍在自行發展類似之大型無人機的情況下仍積極支持此案頗有關係。同時,臺灣軍方對於自製與外購雙規並存顯然也並非毫無配套規劃,而其主要作法為盡可能確保次系統的共同性。譬如説,空軍提出的MQ-9B光電系統規格就採用了與「騰雲機」相同的MX-20,而非美軍原標凖構型所用之NTS-B光電酬載。
根據美方的背景說明,提供給臺灣的MQ-9B將會包含衛星資料鏈,所以該機將可充分發揮其長程性能與較廣闊的作業高度限制,不至於因受限於C波段無線電遙控鏈路的視線距離而只能在150海浬內作業或必須保持高空飛行以維持最大視線距離。至於外傳價錢可能會比原來預估的(約三億多美元)為高,則主要因為臺灣空軍所提出的採購要求包括先進電偵系統(射頻涵蓋為0.5-40GHz,通信涵蓋VHF到D波段,定向精度可達1度RMS)、SeaVue海面蒐索雷達(與空軍現役P-3C反潛機所用者同級)、Link-16鏈路系統、武器以及前述的不同光電酬載之整合測試等。但在權衡申購的選項與服務等差異後,整體價格應仍與北約國家(如比利時等)近年的採購成本相當。
構建無盟約的聯合作戰能力
當然,蔡政府所考量的不僅是純軍事能力或國防產業自主層級的得失或價格的問題,而更著眼於對進一步提升美臺戰略合作有何裨益。由於這牽涉更宏觀的視野,值得我們較深入探討。
臺美之間已四十餘年沒有協防條約,雙方軍事合作固然密切,但終究跟能夠大規模聯合演訓,驗證雙方制定之共同作戰計劃的條約盟邦相去甚遠。美臺斷交後的頭三十年,美軍對臺灣的軍事干預規劃僅限於「概念計劃」(CONPLAN),而非類似協防條約時期「樂城計劃」(Rochester)的正式美臺聯合「作戰計劃」(OPLAN)。直到1995/96年臺海危機之後,美國政府才授權將概念計劃提升到作戰計劃層級,美軍太平洋總部隨後也成立了常設的聯合小組專責因應(包括中共犯臺場景在內的)區域突發事件的計劃與執行。美軍還曾針對臺海想定舉行過多次指揮所演習與至少一次的實兵演習,作戰計劃也從「應急」性質(contingency planning)逐漸向「預先妥備」(deliberate planning)演進。但這一切仍僅限於美國單方面的規劃,並沒有與臺灣聯合作戰的假設。
近幾年來,美方更進一步透過各種方法,在沒有正式邦交與共同防禦協定的局限下盡可能強化美臺軍事合作以及共同作戰的準備。然而,在前述限制下,若中共犯臺,即便美軍確實來馳援,美臺的聯盟作戰頂多也只能屬於「臨時特設」(ad hoc)性質。在缺乏兩國統一作戰指揮計劃,又沒有經常性聯合演習 (包括,指揮所,實兵,實彈)以驗證美臺聯合作戰的情況下,現階段只能盡量先設法讓雙方的準則得致統一協調,並致力於C4ISR (指揮,管制,通信,資訊,情報,情報,監控,偵查) 與後勤之共通。而既然美軍不可能採用台灣自製的系統或自行發展的準則,那自然就得由我們設法配合美軍了。
近一兩年來,中共對臺的軍事威脅無論在能力還是意圖上均顯著升級,美國在其新的國家安全戰略下也決定對中共的戰略競爭正面迎擊,故美方視近期內迅速加強臺灣的防衛能力為最優先目標。而讓臺灣採用與美軍使用相同或至少共通的系統裝備來構建在戰時可共通的C4ISR能量,就是這個思維下的邏輯性與務實性結論之一。而這也正是前述臺美雙方政府默契的基礎。
戰略合作積木
由此可見,美國同意釋出大型無人機給臺灣,可不是單純的軍火交易,而是有完整大國博弈思維脈絡與政策配套的。個別軍事合作本身絕非臺海安全的萬靈丹,區區數億美元的軍售更不足以構成讓美國願意與中共為敵的所謂“保護費”,但卻是可以踏著逐步晉升與雙邊戰略關係的積木。能與美國的一級盟邦(英、法、荷、西、意、比)使用相同的MQ-9無人機來構建可與美軍共通的C4ISR能量,就是美臺雙方高層在前述共識下的這麽一塊積木。這暗喻著跨越了一個重要門欄,走向新的戰略合作境界。
當然,這美麗勇敢的新世界不是沒有它的挑戰的。
一位美方人士日前對筆者說的好: “臺灣被冷落多年,現在好不容易獲得重視了。好消息是「臺灣會得到很多(亟需並盼望了多年)的幫助」,但壞消息也是「臺灣會得到很多(有些恐怕超出預期或難以消化)的幫助」。”
誠哉斯言! 在臺灣政府(與社會)顯然不願大幅提高國防支出,而美國又急於協助臺灣立竿見影的鞏固自衛能力並在防堵中共步步進逼的陣營中做出一定貢獻的局面下,我們該當如何優先選擇對國家最有利的方案?怎樣才能將有限的資源做增進國家整體安全投資報酬率最佳的運用?何以因應美方有時愛深責切的態度與壓力?
精選積木並確保足夠的作業維持資源來發揮其戰略角色功能,將會是臺灣在這個新世界裏必須嚴謹、睿智、勇敢面對的重大課題。