📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有1部Youtube影片,追蹤數超過1,150的網紅Eann Lee,也在其Youtube影片中提到,More about me ⛥ ▪Facebook | Eann Lee https://www.facebook.com/blinqyan ▪Instagram | @eannyan ▪Email | [email protected] ••••••••••••••••••••...
bar foo 在 Eat with Pal Li - พี่แป๋วพากินเที่ยวสิงคโปร์ฮ่องกง Facebook 的最佳貼文
❗️ #โควิดฮ่องกงวันนี้ (13 มี.ค.)
ติดเชื้อใหม่ทั้งหมด +47, ติดในฮ่องกง +43
.
วันนี้ ตัวเลขลดลง แต่ยังคงสูง
.
ข้อมูลสถานที่ที่ผู้ติดเชื้อทำงาน ร้านอาหาร สถานที่ที่ผู้ติดเชื้อเคยไป ดูแล้วเครียดนิดนึง 😆
เพราะตระเวณกันกระหน่ำมาก และเป็นที่ที่พี่แป๋วคุ้นเคยแทบทั้งนั้น โดยเฉพาะร้านอาหาร 😆
.
cluster คราวนี้ มาจากฟิตเนสที่มี expat, banker, lawyer ทำงานกันค่อนข้างเยอะ
ผู้ติดเชื้อเลยจะอยู่ในพื้นที่ elite หน่อย เช่น ทำงานแถว Central บ้านอยู่ Mid-Levels ฯลฯ
(รายชื่อ สถานที่ของผู้ติดเชื้อ พี่แป๋วจะลิสท์ให้ด้านล่างค่ะ)
.
แต่ถ้ามองในมุมที่กำลังลุ้นกันอยู่ว่าจะเกิดเวฟ 5 มั้ย
พี่แป๋วดูตัวเลขพวกติดแบบ preliminary หรือติดแบบไม่ทราบต้นตอ พี่แป๋วว่า มันไม่สูงนะ
ตอนนี้ ก็ลุ้นว่า ขอให้คุมได้เหมือนเคสร้านอาหารที่ K11 MUSEA
.
ปล. Cluster Ursus Fitness (Sai Ying Pun) วันนี้ พุ่งไปที่ 99 คนแล้ว (แต่รอยืนยันผลเหลือไม่เกิน 10 คน)
.
====================
#เคสต่างประเทศ (4 คน)
ปากีสถาน(2)
เนเธอร์แลนด์(1)
อัลบาเนียผ่านดูไบ(1) - พบเชื้อตอนกักตัววันที่ 12
.
เชื้อกลายพันธุ์ - พบในฮ่องกง 75 คน
สายพันธุ์อังกฤษ 37 คน
สายพันธุ์แอฟริกาใต้ 8 คน
สายพันธุ์บราซิล 5 คน
ระบุสายพันธุ์ไม่ได้ 25 คน
.
==================
#เคสในฮ่องกง (43 คน)
เชื่อมโยงเคสเก่า 39 คน, ไม่ทราบต้นตอ 4 คน
.
#ตัวอย่างผู้ติดเชื้อ
- 10+ คน ติดเชื้อแบบรอผลยืนยัน (preliminary) - 7 คน เกี่ยวโยงกับ Ursus Fitness
- 35 คน cluster Ursus Fitness (Sai Ying Pun) (รวม 99 คน; พนักงาน 7 คน สมาชิก 75 คน คนใกล้ชิด 17 คน)
- 1 คน เจ้าหน้าที่แผนกซ่อมบำรุง รพ Sanatorium (Happy Valley)
- 1 คน เทรนเนอร์ @ One Personal Training (ตึก H Code, Central)
- 1 คน ตำรวจหญิง เพิ่งคลอดบุตรเมื่อต้นเดือนนี้ เคยตรวจวันที่ 28 กพ ไม่พบเชื้อ แต่ตรวจอีกครั้ง วันที่ 9 มีค พบเชื้อแล้ว
- (ติดแบบ preliminary) พนักงาน VIP lounge ที่สนามบิน, นร อนุบาลใน Yuen Long, นร ประถมใน Kowloon Tong ฯลฯ
.
อื่นๆ
- รักษาหาย 27 คน
- ไม่มีผู้เสียชีวิต
- สถานที่ทำงานของผู้ติดเชื้อ
1. Shearman & Sterling, 21/F, Gloucester Tower, The Landmark, 15, Queen’s Road Central, Central
2. BGL HK Limited, 4/F, Hilltop Plaza, 49-51 Hollywood Road, Central
3. April Hong Kong Limited, 9/F, Chinachem Hollywood Centre, 1-13, Hollywood Road, Central
4. Eaton Partners, Room 1501, 15/F, New World Tower I, 16-18 Queen’s Road Central, Central
5. Vivin HK Ltd, Room 303, 3/F, Fu Fai Commercial Centre, 27 Hillier Street, Sheung Wan
6. HSBC, 17/F & 22/F, HSBC Main Building, 1 Queen’s Road Central, Central
7. York Capital Management Asia (HK) Advisors Limited, Suites 809-910, 8/F, Chater House, 8 Connaught Road Central, Central
8. Tapfin: Manpower Solutions Company, 3/F, Harcourt House, 39, Gloucester Road, Wan Chai
9. Credit Suisse AG, 88/F, International Commerce Centre, Union Square, 1 Austin Road West, Yau Tsim Mong
10. Date by Tate, G/F, 210 Hollywood Road, Sheung Wan
11. Tate Dining Room, 1/F, 210 Hollywood Road, Sheung Wan
12. H&M Hennes & Mauritz Ltd., 21/F – 22/F, Tower 6, China Hong Kong City, 33 Canton Road, Yau Tsim Mong
13. Allen & Overy (Hong Kong) Limited, 9/F, Three Exchange Square, 8 Connaught Place, Central
14. Herbert Smith Freehills, 23/F, Gloucester Tower, 15 Queen’s Road Central, Central
15. Bloomberg LP, 25/F, Cheung Kong Center, 2 Queen’s Road Central, Central
16. BNP Paribas, 63/F, Two International Finance Centre, 8 Finance Street, Central
17. Asia Pacific Loan Market Association, 32/F, Jardine House, 1 Connaught Place, Central
18. Ernst & Young HK OTP Financial Service, 32/F, One Taikoo Place, 979 King’s Road, Quarry Bay
19. Lunar Capital Management Limited, 4/F, St. George’s Building, 2 Ice House Street, Central
20. Zurich Insurance Company Ltd, 25/F – 26/F, One Island East, 18 Westlands Road, Quarry Bay
21. GBC International Holdings Limited, Room 1309, 13/F, Fat Lee Industrial Building, 17 Hung To Road, Kwun Tong
22. CBRE Group, Inc., Room 1903, 19/F, International Trade Tower, 348 Kwun Tong Road, Ngau Tau Kok
23. Tech Data Computer Service (Hong Kong) Limited, Room 2001, 20/F, Tower 2, Enterprise Square Five, 38 Wang Chiu Road, Kowloon Bay
24. The Frozen Exhibition, G35, G/F, Park Central, 9 Tong Tak Street, Tseung Kwan O
25. BNY Mellon, 26/F, Three Pacific Place, 1 Queen’s Road East, Wan Chai
26. Express Rail Link West Kowloon Control Point, Hong Kong West Kowloon Station, 3 Austin Road West, Yau Tsim Mong
27. Ogilvy, 15/F, K11 Atelier, 728 King’s Road, Quarry Bay
28. Onshorer, Room 826, 8/F, Ocean Centre, Harbour City, 5 Canton Road, Yau Tsim Mong
29. Ashurst (Hong Kong) Services Limited, 11/F, Jardine House, 1 Connaught Place, Central
.
- ร้านอาหารที่ผู้ติดเชื้อเคยไป
1. Mandarin Grill and Bar, 1/F, Mandarin Oriental, 5 Connaught Road, Central
2. SOMM, 7/F, The Landmark Mandarin Oriental
3. DarkSide, Rosewood Hong Kong Victoria Dockside, 18 Salisbury Road, Tsim Sha Tsui.
4. Winstons Coffee, Shop 4, G/F Rich Court, 213 Queen’s Road West, Sai Ying Pun
5. R&R Bagels, 28 Li Yuen Street West, Central.
6. ChaosHotpot, 22 Wun Sha Street, Tai Hang
7. Mama Malouf, G/F, 93 Catchick Street, Kennedy Town
8. Chako, Shop 13, 2/F, J Senses, 18 Ship Street, Wan Chai
9. Five Guys, 60 Johnston Road, Wan Chai
10. sen-ryo, Shop 2002, ELEMENTS, 1 Austin Road West, West Kowloon
11. Fuel Espresso, Landmark, Central
12. Joy Cuisine, Shop 220, 2/F, Choi Ming Shopping Centre, 1 Choi Ming Street, Tiu Keng Leng, Tseung Kwan O
13. Busan Azumma Korean Restaurant, G/F, 5A Humphreys Avenue, Tsim Sha Tsui
14. El Charro Mexican Cantina, The Arcade, 100 Cyberport Road, Pok Fu Lam.
15. Hong Kong Day, Shop N10-12, G/F, Mei Foo Sun Chuen, 1-15, 2-24 Nassau Street, Mei Foo
16. ANA Gura, Shop UG35, Festival Walk, 80 Tat Chee Avenue, Kowloon Tong
17. Hoi Fa Kit Guo, Shop 2A, Block B, Wing Kut Industrial Building, 608 Castle Peak Road, Lai Chi Kok
18. Little Vietnam, Shop 37, G/F, 5G Glee Path, Mei Foo Sun Chuen, Mei Foo
19. Gold Garden Cafe, 314 Castle Peak Road, Cheung Sha Wan.
20. Saizeriya Italian Restaurant, Shop L207, AEON Supermarket, 2/F, Tseung Kwan O Plaza, 1 Tong Tak Street, Tseung Kwan O
21. Nabe Urawa, Shop No. 140-141, 1/F, Park Central, 9 Tong Tak Street, Tseung Kwan O
22. Super Super Congee & Noodles at Shan King Commercial Centre, Tuen Mun
23. New City Restaurant, Shop 102, 1/F, Mei Tin Shopping Centre, Tai Wai
.
- ฟิตเนสอื่นๆ ที่ผู้ติดเชื้อเคยไป (ไม่ใช่รายชื่อทั้งหมด) ตัวอย่างเช่น
1. Pure Fitness สาขา One Hennessy (Wan Chai), Kinwick Centre (Central)
2. Pure Yoga สาขา Lincoln House(Quarry Bay), Centrium(Central)
3. My Fitness Yoga (Jordan)
.
=================
#สถิติภาพรวม
.
#ฮ่องกง
ติดเชื้อสะสมทั้งหมด 11,258 (+47)
เสียชีวิต 203 (1.80%)
รักษาหาย 10,738 (95.38%)
.
#ไทย
ติดเชื้อสะสมทั้งหมด 26,757 (+78)
เสียชีวิต 86 (0.32%)
รักษาหาย 26,086 (97.49%)
.
#ทั่วโลก
ติดเชื้อสะสมทั้งหมด 119,692,742 (+503,272)
เสียชีวิต 2,653,382 (2.22%)
รักษาหาย 96,316,941 (80.47%)
.
#eatlike852 #covid19hongkong
bar foo 在 I FAT 吃货俱乐部 Facebook 的最讚貼文
🌹『#情人节外卖套餐』💐
通过EASI APP下单更便宜
输入Promo Code折扣30%‼️
今天2月14日,一年一度的情人节了!大家已经为另一半准备情人节礼物了吗,或者是请TA吃一顿美味情人节套餐也很不错哦~
由于现在是MCO期间,不需外出,通过点外送方式也可享受到美味又浪漫的情人节套餐😍 只需通过《EASI APP 外送平台》点外送,就可以送到你家啦!方便又省时,重点是更加便宜,让你节省更多❗
槟岛,大山脚与北海的餐厅都可以下单哦!只需浏览Easi App寻找你喜爱的餐厅就可以订购啦!
只需输入以下Promo Code就有30%折扣啦‼️
🌹[#PGSINGLEDOG]
✅Discount 30%
✅MAX cap RM15
✅Min Spend RM20
✅Limit 200 redemption
✅13/2-15/2
✅Eligible to all merchant
✅ 推广 pre order
✅ Each user allow to use 1 time
🌹[#PGLOVEU]
✅Discount 30%
✅MAX cap RM15
✅Min Spend RM20
✅Limit 200 redemption
✅13/2-15/2
✅Eligible to all merchant
✅ 推广 pre order
✅ Each user allow to use 1 time
[以下餐厅加入Easi App]
❤️Artichoke Cafe - Raja Uda
🧡Clash On Cafe - Icon City BM
💛鸡扒王 Raja Uda
💚Dave's Deli - Design Village
💙Forest City - Juru Sentral BM
💜Crazy Dog Breakfast and Brunch - BM
🤎Garden Feel - Butterworth
🖤King Kong Western Delight
🤍130 Wine Bar & Restaurant - Georgetown
❤️Summer Dessert Bakery Cafe - Simpang Ampat
🧡沿海地带生活馆 - Teras Jaya Butterworth
💛James Foo Western Food
💚US Pizza
💙TGI Fridays
💜CRC Western Food
🤎What The Duck Restaurant
🖤Uncle J Cookbook
🤍Wine Houz
❤️Ocean Blue Bar and Kitchen
🧡Tapao Pasta
💛Spink Bayan Lepas
💚Mozzarellaa - Gurney Plaza
💙Hideout Cafe - Gurney Plaza
💜Little Uncle J Cookbook - Karpal Singh
🤎Kenny Rogers
🛵𝙀𝘼𝙎𝙄下载,𝙀𝘼𝙎𝙄有你最爱美食😋
App store下载: bit.ly/hungryapps_apple
Google Play下载: bit.ly/hungryapps_android
Huawei store 下载:https://bit.ly/hungryapps_huawei
bar foo 在 Eann Lee Youtube 的最讚貼文
More about me ⛥
▪Facebook | Eann Lee https://www.facebook.com/blinqyan
▪Instagram | @eannyan
▪Email | peaceyanli@gmail.com
••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
这次的沙巴之旅真是说走就走! 随便趁便宜买了机票才开始规划行程,导致我们的旅程有点仓促。但是整体来说还是很划算的一趟旅程! 以下简单地跟大家分享一下我们去过的景点和餐厅 (Budget Trip)
---------------------------------------------------------------------------------------------------------
[Day 1]
到达 —— KK international Airport
入住 ——M.A.D Suite hotel
午餐 —— 沙巴辣椒板面 Sabah Chilli Pan Mee
逛街 —— KK Imago TImes square
去海边看夕阳 ——Tanjung Aru Beach
晚餐 —— Lucy Kitchen
庆生 —— Waterfront Bar
[Day 2]
早餐——Yee Fong Restaurant
租车上昆达山
第一站—— Desa Dairy Farm
午餐—— 神山中餐厅 SS Chinese Restaurant
第二站—— Kundasang War memorial
晚餐——双天海鲜楼 Restaurant Suang Tain
甜品—— Gaya coconut Shake
[Day 3]
早餐——富源餐厅 Restaurant Foo Yuen
出发到 —— Jesselton 码头
浮潜在 —— Pulau Mamutik
启程返回机场
__________________________________________________________________
我们3天2夜包括机票,住宿,吃喝玩乐和买手信才马币700以内是不是很值得!!! 这绝对是和学生党穷游的好去处 马克起来!
[小贴士]
- 在沙巴上交通最方便的就是使用 Grab Car,每一趟的价钱都很实惠! 建议大家如果跟我们一样是4人出游就不需要天天租车,相反的使用 Grab Car会更方便和经济 (而且透过 Grab Driver你能得知更多地道的景点和美食去处)
- 建议大家如果要上昆达山最好是留宿一晚,可以欣赏日出和日落而且行程也不会那么赶 (好遗憾没看到)
- 建议如果到昆达山旅旅就需要租车,因为山上的交通不太方便接车
- 我们去的这个时段其实不是很好的季节,所以海岛之旅有点小失望因为碰上季候风浪太大,海水不够清澈看不见鱼 所以如果大家要到沙巴跳到之旅要先确认季节才购买机票哦
- 建议大家上网查询每一个海岛资料才下决定,我们选择Mamutik的原因就是少游客,风景优美! (不那么推荐大家去Pulau Sapi,那里整个岛上都是人很难拍到好看的照片,可是水上活动的种类较多)
** by the way 在旅途中碰巧听到这首 Original Sabahan 个人觉得这一首歌很好听 就拿来应景的当了 BGM 哈哈哈