[TOC] <hr/> 本文件筆記下 如果要擴鏈時,每個專案應該新增程式碼的部分。 :::info **參考文獻,先前版本的擴幣攻略:** https://hackmd.io/VeFL_VsJQPCXB10u9MDQlg ::: :::warning **基本知識:** - 網路: 又可稱為Chain/鏈。例如BSC(Binance Smart Chain)、Ethereum、TRON等等都是網路。可以把它想成是銀行的概念;例如有中國信託、兆豐、玉山銀行等等。你可以在每個網路上存款,也可以在不同網路上做跨鏈轉賬。 - 轉賬需要手續費,在加密幣術語中稱為gas fee ::: # 加密幣金流和一般金流的差異 一般金流的流程是,程式建立訂單後,User付費完成,網頁或Server會執行Callback來告知我方說user已經付費完成。 在加密幣上,沒有匯款完成後的Callback機制,所以變成我方程式碼必須不斷的去加密幣幣鏈上查詢 是否有匯款成功的記錄。 在加密幣鏈上,我們可以查到任何一筆交易,以及任何錢包地址裡面有多少額度。例如透過 Bsc Scan來查詢: https://bscscan.com/address/0xf5d27e319c0e428dd418a72bfb4924fe33254924 <br/> <hr/> <br/> # NewGalaxy Java專案 ### 新增幣別類型 #### 在EnumPool.java新增對應的Channel enum `\newgalaxy\common\src\main\java\com\punch\galaxy\vars\EnumPool.java` ![](https://hackmd.io/_uploads/BJeDBD73h.png) ``` public enum Channel { ... MATIC("MATIC", "MATIC", "Polygon", "MATIC", "MATIC", "0.0000315"), MANA("MANA", "MANA", "Polygon", "MANA", "MATIC", "0.000053"); ``` #### ChainBalance.java新增對應的幣別 `\newgalaxy\common\src\main\java\com\punch\galaxy\chain\typed\ChainBalance.java` ``` public class ChainBalance implements Serializable { ... String bnb; .. public BigDecimal getBnb() { return null != bnb ? new BigDecimal(bnb) : null; } public BigDecimal getBalance(String symbol) { ... else if (symbol.equalsIgnoreCase(EnumPool.Channel.BNB.getSymbol())) { return null != bnb ? new BigDecimal(bnb) : null; } return BigDecimal.ZERO; } } ``` CronJob部分到此就可以了 <br/> <hr/> <br/> # galaxy-core - 此專案是一個NodeJs server服務 - 接收NewGalaxy專案服務器傳來的rest api指令 - 加密幣區塊鏈主要溝通的渠道;實際上,生產存款地址、查賬、轉賬等行為都在這處理。 #### 先在 application.yml 做好設定資料,例如Api Key和Contract Address ![](https://hackmd.io/_uploads/rysEhU7h3.png) ## api.js - 主要處理rest api指令 #### 需要新增的程式碼: - 先定義加密幣的網路,和幣別代碼 ![](https://hackmd.io/_uploads/H1KagE_u2.png) 用途於在接收rest api指令時,需確認參數裡的chain和symbol是我們認可的。 #### 需要擴充的rest api指令: ##### /account - 創建存款地址 - 針對每個user,都會為它創一個存款地址。存在tk_tokenwallet資料表裡。 - 參數:網路; Eth, Bsc, Tron #### /balance - 查詢某個地址的額度 - 參數:網路, 地址 #### /transactions - 查詢某地址的交易記錄列表 - 參數:網路, 地址, 幣別 #### /transfer - 轉賬 - 參數:網路, 來源地址, 來源地址的private key, 幣別, 目標地址, 額度 #### /transactionInfo - 查詢交易記錄細節 - ChainCron如果發現有未處理完成的transaction時,會呼叫此api來驗證transaction是否是成功的。如果驗證 #### /validAddress - 一個string validation,驗證字串是合法地址的格式 #### 新增一個專處理此幣別的lib檔案 `範例路徑: \galaxy-core\api\chain\polygon.js` 確認如果此幣是ERC-20標準的話,可直接 extends Erc20Token: 以Polygon鏈來為範例 - 建立一個class extends Erc20Token - 上網搜尋它的api url節點是什麼,然後設定進去即可 - 如下圖: ![](https://hackmd.io/_uploads/SyXIpIQ23.png) 這樣既完成Polygon的主幣Matic的擴充 ### 擴充Polygon鏈上其他ERC20幣 (MANA幣) - 建立class extends Polygon - 要上網查MANA幣的Contract Address,然後設定進去即可 - 如下圖: ![](https://hackmd.io/_uploads/ByXaRIQ23.png) 這樣既完成Polygon的Contract幣Mana的擴充 <br/><hr/><br/>