μ΄λ리μ κΈ°λ° ν ν° μ μ‘ λ° μ§κ° κ΄λ¦¬λ₯Ό μν Node.js λ°±μλ μλ²μ λλ€.
TokenPass Walletμ Web3.jsλ₯Ό νμ©νμ¬ μ΄λ리μ λ€νΈμν¬μ μνΈμμ©νλ RESTful API μλ²μ λλ€. ERC20 ν ν° μ μ‘, λ©ν° μΌλ κΈ°λ₯, μ§κ° κ΄λ¦¬ λ±μ κΈ°λ₯μ μ 곡ν©λλ€.
- EVM κ³μ μμ±
- μ΄λ리μ μκ³ μ‘°ν
- ERC20 ν ν° μκ³ μ‘°ν
- Nonce κ΄λ¦¬
- μ΄λ리μ μ μ‘ (
/transferEther) - ERC20 ν ν° μ μ‘ (
/transferToken) - λ©ν° μΌλ κΈ°λ₯ (
/multisend) - μμΉκΈ μ μ‘ (
/depositSend)
- μ€μκ° Gas Price μ‘°ν
- μ΄λ μ μ‘ μμλ£ κ³μ°
- ν ν° μ μ‘ μμλ£ κ³μ°
- ERC20 ν ν° μ 보 μ‘°ν (name, symbol, decimal)
- ν ν° μκ³ μ‘°ν
- λ€μ€ μ£Όμλ‘ ν ν° μΌκ΄ μ μ‘
- μ¬μ©μ Fee κ΄λ¦¬
- Fee νλΆ κΈ°λ₯ (
/claimUserFees)
- Runtime: Node.js
- Framework: Express.js
- Blockchain: Web3.js (v1.2.6)
- Dependencies:
bignumber.js: μ λ°ν μ«μ κ³μ°ethereumjs-tx: νΈλμμ μλͺbody-parser: HTTP μμ² νμ±node-fetch: HTTP μμ²
# μ μ₯μ ν΄λ‘
git clone https://github.com/moonlightpark/nodeServer.git
cd nodeServer
# μμ‘΄μ± μ€μΉ
npm install
# constants.js νμΌ μ€μ (보μ μ 보 ν¬ν¨)
# constants.js νμΌμ μμ±νκ³ νμν μ€μ κ°μ μ
λ ₯νμΈμconstants.js νμΌμ λ€μ μ 보λ₯Ό μ€μ ν΄μΌ ν©λλ€:
- λ€νΈμν¬ μ€μ (Mainnet, Sepolia λ±)
- 컨νΈλνΈ μ£Όμ
- Private Key
- μ κ·Ό νμ© IP λͺ©λ‘
- ABI μ 보
constants.js νμΌμ λ―Όκ°ν μ 보λ₯Ό ν¬ν¨νλ―λ‘ Gitμ 컀λ°λμ§ μμ΅λλ€.
# λ©μΈλ· μλ² μ€ν (ν¬νΈ 3001)
node server.js
# κ°λ° μλ² μ€ν (ν¬νΈ 3000)
node dev.js
# Sepolia ν
μ€νΈλ· μλ² μ€ν (ν¬νΈ 3002)
node doraemon01.jsGET /- μλ² μν νμΈGET /ether/account- μ EVM κ³μ μμ±GET /ether/getbalance- μ΄λ리μ μκ³ μ‘°νGET /token/getbalance- ν ν° μκ³ μ‘°ν
GET /ether/version/network- λ€νΈμν¬ μ 보 μ‘°νGET /ether/gas- νμ¬ Gas Price μ‘°ν
GET /senderNonce- Sender Ownerμ Nonce μ‘°νGET /getUserNonce- νΉμ μ£Όμμ Nonce μ‘°ν
GET /token/info- ERC20 ν ν° μ 보 μ‘°ν
POST /ether/gasprice- μ΄λ μ μ‘ μμλ£ κ³μ°POST /token/gasprice- ν ν° μ μ‘ μμλ£ κ³μ°
POST /transferEther- μ΄λ리μ μ μ‘POST /transferToken- ERC20 ν ν° μ μ‘POST /multisend- λ©ν° μΌλ (λ€μ€ μ μ‘)POST /depositSend- μμΉκΈ μ μ‘GET /getTransction- νΈλμμ μ‘°νGET /getTransactionReceipt- νΈλμμ Receipt μ‘°ν
GET /getCurrentFee- νμ¬ μ μ‘ μμλ£ μ‘°νGET /getUserFeeData- μ¬μ©μ Fee λ°μ΄ν° μ‘°νPOST /claimUserFees- μ¬μ©μ Fee νλΆ
GET /senderAddress- Multi Sender μ£Όμ μ‘°νGET /senderOwnerAddress- Sender Owner μ£Όμ μ‘°ν
nodeServer/
βββ abis/ # μ€λ§νΈ 컨νΈλνΈ ABI νμΌ
β βββ ERC20ABI.json
β βββ sender.json
β βββ sepolia/
βββ classes/ # ν΄λμ€ λͺ¨λ
β βββ gasPriceStore.js # Gas Price κ΄λ¦¬
β βββ txStore.js # νΈλμμ
μ²λ¦¬
βββ log/ # λ‘κ·Έ νμΌ λλ ν 리
βββ common.js # κ³΅ν΅ ν¨μ λͺ¨λ
βββ constants.js # μ€μ μμ (Git μ μΈ)
βββ getWeb3.js # Web3 μΈμ€ν΄μ€ μμ±
βββ getToken.js # ν ν° μ 보 λ‘λ
βββ mysql-db.js # MySQL μ°κ²° (μ νμ¬ν)
βββ server.js # λ©μΈ μλ² (ν¬νΈ 3001)
βββ dev.js # κ°λ° μλ² (ν¬νΈ 3000)
βββ doraemon01.js # Sepolia μλ² (ν¬νΈ 3002)
βββ package.json # νλ‘μ νΈ μ€μ
- IP κΈ°λ° μ κ·Ό μ μ΄ κ΅¬ν
- Private Keyλ
constants.jsμ μμ νκ² λ³΄κ΄ .gitignoreλ₯Ό ν΅ν΄ λ―Όκ°ν νμΌ μ μΈ- νΈλμμ μλͺ μ μλ²μμ μ²λ¦¬
GET /ether/getbalance?address=0x1234...POST /transferToken
Content-Type: application/json
{
"from": "0x1234...",
"to": "0x5678...",
"token": "0xabcd...",
"balance": "1000000000000000000",
"n": 5
}POST /multisend
Content-Type: application/json
{
"txid_fee": "0x...",
"txid_token": "0x...",
"fromAddr": "0x1234...",
"tokenAddr": "0xabcd...",
"nonce": 10,
"index": 1,
"sendAddrs": [
{"addr": "0x5678...", "amount": 100},
{"addr": "0x9abc...", "amount": 200}
]
}- Ethereum Mainnet (ν¬νΈ 3001)
- Sepolia Testnet (ν¬νΈ 3002)
- κ°λ° νκ²½ (ν¬νΈ 3000)
ISC
XXXXXXXXXXX
constants.jsνμΌμ λ°λμ μμ±ν΄μΌ νλ©°, Private Key λ± λ―Όκ°ν μ 보λ₯Ό ν¬ν¨ν©λλ€.- νλ‘λμ νκ²½μμλ λ°λμ HTTPSλ₯Ό μ¬μ©νμΈμ.
- IP μ κ·Ό μ μ΄λ₯Ό μ μ ν μ€μ νμΈμ.
- Gas Priceλ λ€νΈμν¬ μν©μ λ°λΌ λ³λλλ―λ‘ μ£ΌμνμΈμ.
- νΈλμμ μ μ‘ μ μΆ©λΆν ν μ€νΈλ₯Ό μννμΈμ.