Skip to content

Commit 4a5224e

Browse files
committed
changed route to tokens transfer to request-transfer and begun working on a custom transaction for transfers from any address
1 parent d77cdeb commit 4a5224e

File tree

3 files changed

+81
-2
lines changed

3 files changed

+81
-2
lines changed

server/app/controllers/api-erc20-tokens.js

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,13 @@ Erc20TokensController.prototype.getBalance = function (req, res, next) {
9191
};
9292

9393
/**
94-
* Transfer tokens from owner address to any token
94+
* Transfer tokens from owner address to any address
9595
* Requires: owner address is unlocked in the node, the owner address has tokens for the requested token name
9696
* @param {Request} req
9797
* @param {Response} res
9898
* @param {Next} next
9999
*/
100-
Erc20TokensController.prototype.transfer = function (req, res, next) {
100+
Erc20TokensController.prototype.requestTransfer = function (req, res, next) {
101101
// console.log('test params:', req.params)
102102
// console.log('test body:', req.body)
103103
let obj = new Object();
@@ -153,4 +153,78 @@ Erc20TokensController.prototype.transfer = function (req, res, next) {
153153
}
154154
};
155155

156+
/**
157+
* Transfer tokens from any address to another address
158+
* Requires: owner address is unlocked in the node, the owner address has tokens for the requested token name
159+
* @param {Request} req
160+
* @param {Response} res
161+
* @param {Next} next
162+
*/
163+
Erc20TokensController.prototype.transfer = function (req, res, next) {
164+
// console.log('test params:', req.params)
165+
// console.log('test body:', req.body)
166+
let obj = new Object();
167+
let tokenRequested = req.params.tokenName;
168+
// let addressRequested = req.params.address;
169+
let toAddress = req.body.toAddress;
170+
let tokenValue = req.body.value;
171+
let address;
172+
let tokenHelpers;
173+
let contractAddress;
174+
const ownerAddress = connections.ownerAddress;
175+
176+
obj.method = 'transfer';
177+
obj.params = req.params
178+
obj.body = req.body
179+
180+
/**
181+
* Check address parameter is a valid ethereum address
182+
* Check token name and check it against a json file to make sure its available and has a contract to connect to
183+
* Instanciate the token helpers class and call contract method
184+
*/
185+
try {
186+
address = toAddress != null && web3.utils.isAddress(req.body.toAddress) ? toAddress : false;
187+
if (address === false) {
188+
obj.error = `Address ${toAddress} is not valid ethereum address`;
189+
throw obj;
190+
}
191+
// check token
192+
obj.erc20Available = erc20Tokens.filter((token) => {
193+
return token.name === tokenRequested;
194+
})
195+
if (obj.erc20Available.length > 0) {
196+
contractAddress = obj.erc20Available[0].contractAddress;
197+
tokenHelpers = new TokenHelpers(contractAddress, ownerAddress);
198+
// call contract method
199+
obj.transferABI = tokenHelpers.transferABI(toAddress, tokenValue)
200+
// tokenHelpers.transferABI(toAddress, tokenValue).then((abi) => {
201+
// obj.transferABI = abi
202+
// })
203+
console.log('obj.transferABI',obj.transferABI)
204+
// let txObject = {
205+
// from: "",
206+
207+
// }
208+
// web3.eth.signTransaction(txObject);
209+
res.send(obj);
210+
// return tokenHelpers.transfer(toAddress, tokenValue)
211+
// .then((balance) => {
212+
// console.log('erc transfer controller transferred: ', balance)
213+
// obj.txHash = balance
214+
// return res.send(obj)
215+
// })
216+
// .catch((err) => {
217+
// console.log('erc transfer controller err: ', err)
218+
// obj.error = err;
219+
// throw obj;
220+
// })
221+
} else {
222+
obj.error = `Token ${tokenRequested} is not available on this api`
223+
throw obj;
224+
}
225+
} catch (error) {
226+
res.status(404).send(error).end();
227+
}
228+
};
229+
156230
module.exports = Erc20TokensController;

server/app/erc20Tokens/TokenHelpers.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ class TokenHelpers {
7575
async transfer(toAddress,value) {
7676
return this.tokenWeb3.methods.transfer(toAddress, value).send({from: connections.ownerAddress})
7777
}
78+
79+
async transferABI(toAddress,value) {
80+
return this.tokenWeb3.methods.transfer(toAddress, value).encodeABI();
81+
}
7882
}
7983

8084
module.exports = TokenHelpers;

server/app/routes/api-token.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ router.post('/transfer-from', tokenApi.transferFrom)//requires req.body
4848
*/
4949
router.get('/:tokenName', erc20TokensController.test);
5050
router.get('/:tokenName/getbalance/:address', erc20TokensController.getBalance);
51+
router.post('/:tokenName/request-transfer',erc20TokensController.requestTransfer)
5152
router.post('/:tokenName/transfer',erc20TokensController.transfer)
5253

5354
module.exports = router;

0 commit comments

Comments
 (0)