## Opendax Wallet plugin This service is used in OpenDAX Go HDwallet microservice to generate wallets, sign and broadcast transactions. It is using BIP-32 HD Wallet, which mean all addresses are generated from one master seed ### Settings configuration examples Deposit wallet ```json blockchain_key: eth blockchain (infura) with right explorer_address, explorer_transaction gateway: field set as `opendax` settings: uri: a link to go-hd microservice (e.g. "https://hdwallet/api/v2/hdwallet") gateway_url: a url of the infura or private node for broadcast transactions ``` Example: ```ruby Wallet.create!( blockchain_key: "eth-testnet", name: "ETH/ERC-20 Deposit Wallet", address: "changeme", gateway: "opendax", kind: "deposit", settings: {uri: "https://hdwallet/api/v2/hdwallet", gateway_url: "https://infura.io"}, max_balance: 0, status: "active" ) ``` Hot wallet To save Hot wallet you need to generate it [see](#create-address) ```json blockchain_key: eth blockchain (infura) with right explorer_address, explorer_transaction gateway: field set as `opendax` address: Hot wallet address settings: uri: a link to go-hd microservice (https://hdwallet/api/v2/hdwallet) gateway_url: a url of the infura or private node for broadcast transactions wallet_index: should be vault encrypted secret from wallet private key secret: index provided in the address generation step ``` Example: ```ruby Wallet.create!( blockchain_key: "eth-testnet", name: "ETH/ERC-20 HOT Wallet", address: "hot-wallet-address", gateway: "opendax", kind: "hot", settings: { uri: "https://hdwallet/api/v2/hdwallet", gateway_url: "https://infura.io"}, wallet_index: 1, secret: "changeme", max_balance: 1000, status: "active" ) ``` #### Implemented functions are ### Create address To test address creating you need to be sure that: 1. You have deposit wallet with right configuration - `blockchain_key` should be some fake blockchain with right explorer_address, explorer_transaction - `gateway` field set as `opendax` - in wallet settings you have: - `uri` should be a link to go-hd microservice, default is `https://hdwallet/api/v2/hdwallet`; - `gateway_url` should be a url of the crypto node, infura; - `passphrase` - should be vault encrypted secret from wallet private key; - `wallet_index` - index provided in the address generation step ### There are 3 options to test: 1. From rails console ```ruby # Find deposit wallet and save it to variable w = Wallet.find(id) service = WalletService.new(w) service.create_address!(uid, {}) # response { "address":"0x6876447bF1ab4efc09740e242eaED2Ab389509a4", "passphrase":"2ee7dc93b6581c3ac31f62d32257477e", "coin-type":"eth", "wallet-index":20004 } ``` 2. From API call `api/v2/peatio/account/deposit_address/:currency` ```json // response { "currencies": ["bigo","cro","eth"], "address":"0xb06dd7f8ee1852cf3f9e43b9a703a06f8e28d31f", "state":"active" } ``` 3. From peatio daemon To check if there is some problem, with user address generation you should check `amqp-daemon-deposit-coin-address` daemon logs To verify address information has right format ```ruby # Find deposit wallet and member configuration wallet = Wallet.find(id) member = Member.find_by(email 'your email') # Find member payment address payment_address = PaymentAddress.find_by(wallet_id: wallet.id, member_id: member.id) # In payment address secret should be information about passphrase (encrypted password from private key) payment_address.secret "a4ee099cc541dd222dc24ea546dd46c6" # In payment address details should be information about wallet index, and coin type payment_address.details {"wallet_index"=>2, "coin_type"=>"eth"} ``` ### Create transaction To test create transaction you should have all configuration described on `create_address` step for all wallets related to your currency (especially deposit, hot wallet) Be sure that you have blockchain configured before doing transaction and this blockchain-key connected both for currency and wallets! Blockchain `server` param should be the same as `url` param in wallet settings (node url, infura url) 1. Deposit - Deposit some funds to your created address - Check logs of `daemon-deposit` - You can get information about deposit status from rails console, admin tower or your wallet page 2. Withdraw - Transfer funds from your account - Check logs of `amqp-daemon-withdraw-coin` about withdraw status from rails console, admin tower or your wallet page ### Load balance To test load balance you should have all configuration described on `create_address` step for all wallets related to your currency (deposit, hot, warm, cold) ### There are 2 options to test: 1. From rails console ```ruby 1. Find deposit wallet and save it to variable w = Wallet.find(id) w.current_balance # response { "balance":216380800000000000 } ``` 2. From Admin API call `api/v2/peatio/admin/wallets/:id` ```json //response "id": 1, "name": "Test wallet", "kind": "deposit", "currencies": ["fth","seele"], "address": "changeme", "gateway": "parity", "max_balance": "212.0", "balance": { "fth": "2.3", "seele": "223.3" }, "blockchain_key": "eth-testnet", "status": "active", "created_at": "2020-09-10T17:53:03+02:00","updated_at": "2020-10-20T05:00:49+02:00" ```