@exodus/ethereum-lib 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +0 -0
- package/lib/create-contract/dai.js +85 -0
- package/lib/create-contract/erc20.js +71 -0
- package/lib/create-contract/index.js +22 -0
- package/lib/index.js +15 -0
- package/package.json +20 -0
package/LICENSE.md
ADDED
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = createContract;
|
|
7
|
+
exports.MIGRATION_CONTRACT = void 0;
|
|
8
|
+
|
|
9
|
+
var _ethereumjsUtil = _interopRequireDefault(require("ethereumjs-util"));
|
|
10
|
+
|
|
11
|
+
var _erc = _interopRequireDefault(require("./erc20"));
|
|
12
|
+
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
|
|
15
|
+
// TODO: possibly move this to @exodus/assets so that we have all connected contracts in one place
|
|
16
|
+
// to change easily of we ever add support for testnets.
|
|
17
|
+
const MIGRATION_CONTRACT = '0x25601b0f6ba68197de2a7ae3c11ab2c965221e44';
|
|
18
|
+
exports.MIGRATION_CONTRACT = MIGRATION_CONTRACT;
|
|
19
|
+
|
|
20
|
+
function createContract(addresses, currency) {
|
|
21
|
+
const {
|
|
22
|
+
addresses: daiAddresses,
|
|
23
|
+
...rest
|
|
24
|
+
} = (0, _erc.default)(addresses, currency);
|
|
25
|
+
daiAddresses.migration = MIGRATION_CONTRACT; // const APPROVE_ALL_METHOD_ID = ethUtil.bufferToHex(ethUtil.sha3('approve(address)').slice(0, 4))
|
|
26
|
+
|
|
27
|
+
const APPROVE_ALL_METHOD_ID = '0xdaea85c5'; // TODO: not verified:
|
|
28
|
+
// const APPROVE_ALL_EVENT_ID = ethUtil.bufferToHex(ethUtil.sha3('Approve(address,address)'))
|
|
29
|
+
|
|
30
|
+
const APPROVE_ALL_EVENT_ID = '0xf37f546c25e850257cc0c94f92bec94a17e2f0e884ddda268a25d8144b70eb6a'; // console.log('DAI aproveAll ids:', APPROVE_ALL_METHOD_ID, APPROVE_ALL_EVENT_ID)
|
|
31
|
+
|
|
32
|
+
const approveAll = {
|
|
33
|
+
METHOD_ID: APPROVE_ALL_METHOD_ID,
|
|
34
|
+
EVENT_ID: APPROVE_ALL_EVENT_ID,
|
|
35
|
+
|
|
36
|
+
build(address) {
|
|
37
|
+
return Buffer.concat([_ethereumjsUtil.default.toBuffer(APPROVE_ALL_METHOD_ID), _ethereumjsUtil.default.zeros(12), _ethereumjsUtil.default.toBuffer(address)]);
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
test(data) {
|
|
41
|
+
return _ethereumjsUtil.default.bufferToHex(data.slice(0, 4)) === APPROVE_ALL_METHOD_ID;
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
parse(data) {
|
|
45
|
+
if (!approveAll.test(data)) throw new Error('It is not approve data');
|
|
46
|
+
return {
|
|
47
|
+
address: _ethereumjsUtil.default.bufferToHex(data.slice(16, 36))
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}; // const SWAP_SAI_TO_DAI_METHOD_ID = ethUtil.bufferToHex(ethUtil.sha3('swapSaiToDai(uint256)').slice(0, 4))
|
|
52
|
+
|
|
53
|
+
const SWAP_SAI_TO_DAI_METHOD_ID = '0xfbabdebd'; // TODO: not verified:
|
|
54
|
+
// const SWAP_SAI_TO_DAI_EVENT_ID = ethUtil.bufferToHex(ethUtil.sha3('SwapSaiToDai(address,uint256)'))
|
|
55
|
+
|
|
56
|
+
const SWAP_SAI_TO_DAI_EVENT_ID = '0xa51ac4672c9a04d2246dc156eb5f2f522e6d9b78105ae85d4c131f600e2e4df6'; // console.log('DAI swapSaiToDai ids:', SWAP_SAI_TO_DAI_METHOD_ID, SWAP_SAI_TO_DAI_EVENT_ID)
|
|
57
|
+
// This operation must be sent to the migration contract
|
|
58
|
+
|
|
59
|
+
const swapSaiToDai = {
|
|
60
|
+
METHOD_ID: SWAP_SAI_TO_DAI_METHOD_ID,
|
|
61
|
+
EVENT_ID: SWAP_SAI_TO_DAI_EVENT_ID,
|
|
62
|
+
|
|
63
|
+
build(bufAmount) {
|
|
64
|
+
return Buffer.concat([_ethereumjsUtil.default.toBuffer(SWAP_SAI_TO_DAI_METHOD_ID), _ethereumjsUtil.default.zeros(32 - bufAmount.length), bufAmount]);
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
test(data) {
|
|
68
|
+
return _ethereumjsUtil.default.bufferToHex(data.slice(0, 4)) === SWAP_SAI_TO_DAI_METHOD_ID;
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
parse(data) {
|
|
72
|
+
if (!swapSaiToDai.test(data)) throw new Error('It is not swapSaiToDai data');
|
|
73
|
+
return {
|
|
74
|
+
amount: currency.baseUnit(_ethereumjsUtil.default.bufferToHex(data.slice(4, 36)))
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
addresses: daiAddresses,
|
|
81
|
+
...rest,
|
|
82
|
+
approveAll,
|
|
83
|
+
swapSaiToDai
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = createContract;
|
|
7
|
+
|
|
8
|
+
var _ethereumjsUtil = _interopRequireDefault(require("ethereumjs-util"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
function createContract(addresses, currency) {
|
|
13
|
+
// First 4 bytes of Keccak256('transfer(address,uint256)')
|
|
14
|
+
// const TRANSFER_METHOD_ID = ethUtil.bufferToHex(ethUtil.sha3('transfer(address,uint256)').slice(0, 4))
|
|
15
|
+
const TRANSFER_METHOD_ID = '0xa9059cbb'; // Keccak256('Transfer(address,address,uint256)')
|
|
16
|
+
// const TRANSFER_EVENT_ID = ethUtil.bufferToHex(ethUtil.sha3('Transfer(address,address,uint256)'))
|
|
17
|
+
|
|
18
|
+
const TRANSFER_EVENT_ID = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
19
|
+
const transfer = {
|
|
20
|
+
METHOD_ID: TRANSFER_METHOD_ID,
|
|
21
|
+
EVENT_ID: TRANSFER_EVENT_ID,
|
|
22
|
+
|
|
23
|
+
build(to, bufAmount) {
|
|
24
|
+
return Buffer.concat([_ethereumjsUtil.default.toBuffer(TRANSFER_METHOD_ID), _ethereumjsUtil.default.zeros(12), _ethereumjsUtil.default.toBuffer(to), _ethereumjsUtil.default.zeros(32 - bufAmount.length), bufAmount]);
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
test(data) {
|
|
28
|
+
return _ethereumjsUtil.default.bufferToHex(data.slice(0, 4)) === TRANSFER_METHOD_ID;
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
parse(data) {
|
|
32
|
+
if (!transfer.test(data)) throw new Error('It is not transfer data');
|
|
33
|
+
return {
|
|
34
|
+
to: _ethereumjsUtil.default.bufferToHex(data.slice(16, 36)),
|
|
35
|
+
amount: currency.baseUnit(_ethereumjsUtil.default.bufferToHex(data.slice(36, 68)))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}; // ethUtil.bufferToHex(ethUtil.sha3('approve(address,uint256)').slice(0, 4))
|
|
40
|
+
|
|
41
|
+
const APPROVE_METHOD_ID = '0x095ea7b3'; // TODO: not verified:
|
|
42
|
+
// ethUtil.bufferToHex(ethUtil.sha3('Approve(address,address,uint256)'))
|
|
43
|
+
|
|
44
|
+
const APPROVE_EVENT_ID = '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925';
|
|
45
|
+
const approve = {
|
|
46
|
+
METHOD_ID: APPROVE_METHOD_ID,
|
|
47
|
+
EVENT_ID: APPROVE_EVENT_ID,
|
|
48
|
+
|
|
49
|
+
build(address, bufAmount) {
|
|
50
|
+
return Buffer.concat([_ethereumjsUtil.default.toBuffer(APPROVE_METHOD_ID), _ethereumjsUtil.default.zeros(12), _ethereumjsUtil.default.toBuffer(address), _ethereumjsUtil.default.zeros(32 - bufAmount.length), bufAmount]);
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
test(data) {
|
|
54
|
+
return _ethereumjsUtil.default.bufferToHex(data.slice(0, 4)) === APPROVE_METHOD_ID;
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
parse(data) {
|
|
58
|
+
if (!approve.test(data)) throw new Error('It is not approve data');
|
|
59
|
+
return {
|
|
60
|
+
address: _ethereumjsUtil.default.bufferToHex(data.slice(16, 36)),
|
|
61
|
+
amount: currency.baseUnit(_ethereumjsUtil.default.bufferToHex(data.slice(36, 68)))
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
addresses,
|
|
68
|
+
transfer,
|
|
69
|
+
approve
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = createContract;
|
|
7
|
+
|
|
8
|
+
var _erc = _interopRequireDefault(require("./erc20"));
|
|
9
|
+
|
|
10
|
+
var _dai = _interopRequireDefault(require("./dai"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function createContract(addresses, currency, assetName) {
|
|
15
|
+
switch (assetName) {
|
|
16
|
+
case 'dai':
|
|
17
|
+
return (0, _dai.default)(addresses, currency);
|
|
18
|
+
|
|
19
|
+
default:
|
|
20
|
+
return (0, _erc.default)(addresses, currency);
|
|
21
|
+
}
|
|
22
|
+
}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "createContract", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _createContract.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _createContract = _interopRequireDefault(require("./create-contract"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@exodus/ethereum-lib",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Ethereum Library",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"lib"
|
|
8
|
+
],
|
|
9
|
+
"author": "Exodus Movement, Inc.",
|
|
10
|
+
"license": "UNLICENSED",
|
|
11
|
+
"homepage": "https://github.com/ExodusMovement/ethereum#readme",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "restricted"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@exodus/assets": "~4.0.0",
|
|
17
|
+
"ethereumjs-util": "5.2.0"
|
|
18
|
+
},
|
|
19
|
+
"gitHead": "0a8635a17140ddf9dd9136d8646691d012e9701a"
|
|
20
|
+
}
|