basic events

This commit is contained in:
mihaisc 2021-11-04 17:00:43 +02:00
parent dd238aa614
commit b39ecb6e12
33 changed files with 5399 additions and 60855 deletions

View File

@ -1,4 +1,4 @@
node_modules
data
src/types
src/@types

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,679 +0,0 @@
[
{
"constant": false,
"inputs": [
{
"name": "spender",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "sender",
"type": "address"
},
{
"name": "recipient",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "BASE_MARKET_FEE_PERCENTAGE",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "spender",
"type": "address"
},
{
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "spender",
"type": "address"
},
{
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "recipient",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "BASE_COMMUNITY_FEE_PERCENTAGE",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "owner",
"type": "address"
},
{
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "BASE",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"name": "name",
"type": "string"
},
{
"name": "symbol",
"type": "string"
},
{
"name": "minterAddress",
"type": "address"
},
{
"name": "cap",
"type": "uint256"
},
{
"name": "blob",
"type": "string"
},
{
"name": "feeCollector",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "consumer",
"type": "address"
},
{
"indexed": true,
"name": "payer",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"name": "serviceId",
"type": "uint256"
},
{
"indexed": false,
"name": "timestamp",
"type": "uint256"
},
{
"indexed": true,
"name": "mrktFeeCollector",
"type": "address"
},
{
"indexed": false,
"name": "marketFee",
"type": "uint256"
}
],
"name": "OrderStarted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "orderTxId",
"type": "bytes32"
},
{
"indexed": true,
"name": "consumer",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"name": "serviceId",
"type": "uint256"
},
{
"indexed": true,
"name": "provider",
"type": "address"
},
{
"indexed": false,
"name": "timestamp",
"type": "uint256"
}
],
"name": "OrderFinished",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "currentMinter",
"type": "address"
},
{
"indexed": false,
"name": "newMinter",
"type": "address"
}
],
"name": "MinterProposed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "currentMinter",
"type": "address"
},
{
"indexed": false,
"name": "newMinter",
"type": "address"
}
],
"name": "MinterApproved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "owner",
"type": "address"
},
{
"indexed": true,
"name": "spender",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"constant": false,
"inputs": [
{
"name": "name",
"type": "string"
},
{
"name": "symbol",
"type": "string"
},
{
"name": "minterAddress",
"type": "address"
},
{
"name": "cap",
"type": "uint256"
},
{
"name": "blob",
"type": "string"
},
{
"name": "feeCollector",
"type": "address"
}
],
"name": "initialize",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "account",
"type": "address"
},
{
"name": "value",
"type": "uint256"
}
],
"name": "mint",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "consumer",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
},
{
"name": "serviceId",
"type": "uint256"
},
{
"name": "mrktFeeCollector",
"type": "address"
}
],
"name": "startOrder",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "orderTxId",
"type": "bytes32"
},
{
"name": "consumer",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
},
{
"name": "serviceId",
"type": "uint256"
}
],
"name": "finishOrder",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "newMinter",
"type": "address"
}
],
"name": "proposeMinter",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "approveMinter",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "blob",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "cap",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "account",
"type": "address"
}
],
"name": "isMinter",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "minter",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isInitialized",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "amount",
"type": "uint256"
},
{
"name": "feePercentage",
"type": "uint256"
}
],
"name": "calculateFee",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
}
]

File diff suppressed because one or more lines are too long

View File

@ -1,222 +0,0 @@
[
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_spender",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_from",
"type": "address"
},
{
"name": "_to",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_to",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
},
{
"name": "_spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "owner",
"type": "address"
},
{
"indexed": true,
"name": "spender",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
}
]

View File

@ -1,17 +0,0 @@
[
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]

View File

@ -1,17 +0,0 @@
[
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]

1174
abis/ERC20Template.json Normal file

File diff suppressed because one or more lines are too long

1095
abis/ERC721Factory.json Normal file

File diff suppressed because one or more lines are too long

790
abis/FactoryRouter.json Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@ services:
postgres_pass: let-me-in
postgres_db: graph-node
ipfs: 'ipfs:5001'
ethereum: 'rinkeby:https://rinkeby.infura.io/v3/${INFURA_PROJECT_ID}'
ethereum: 'barge:http://172.15.0.3:8545'
RUST_LOG: info
ipfs:
image: ipfs/go-ipfs:v0.4.23

547
package-lock.json generated
View File

@ -22,7 +22,7 @@
"auto-changelog": "^2.3.0",
"chai": "^4.3.4",
"chai-spies": "^1.0.0",
"eslint": "^8.0.1",
"eslint": "^7.32.0",
"eslint-config-oceanprotocol": "^1.5.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.24.2",
@ -1284,14 +1284,14 @@
"deprecated": "Please use @ensdomains/ens-contracts"
},
"node_modules/@eslint/eslintrc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz",
"integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==",
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
"integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.0.0",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
@ -1300,7 +1300,7 @@
"strip-json-comments": "^3.1.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/@ethereum-navigator/atlas": {
@ -3704,9 +3704,9 @@
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
"integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
"integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.0",
@ -11104,6 +11104,15 @@
"node": ">=0.10.0"
}
},
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/async": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
@ -15101,36 +15110,37 @@
}
},
"node_modules/eslint": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz",
"integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==",
"version": "7.32.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
"integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
"dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.0.3",
"@humanwhocodes/config-array": "^0.6.0",
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3",
"@humanwhocodes/config-array": "^0.5.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"debug": "^4.0.1",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^6.0.0",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.0.0",
"espree": "^9.0.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^2.1.0",
"eslint-visitor-keys": "^2.0.0",
"espree": "^7.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^6.0.1",
"glob-parent": "^5.1.2",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"js-yaml": "^4.1.0",
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
@ -15138,10 +15148,11 @@
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
"regexpp": "^3.2.0",
"regexpp": "^3.1.0",
"semver": "^7.2.1",
"strip-ansi": "^6.0.0",
"strip-json-comments": "^3.1.0",
"table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
@ -15149,7 +15160,7 @@
"eslint": "bin/eslint.js"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
"node": "^10.12.0 || >=12.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@ -16365,12 +16376,6 @@
"node": ">=8"
}
},
"node_modules/eslint/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"node_modules/eslint/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@ -16387,71 +16392,28 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/eslint/node_modules/eslint-scope": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
"integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
"node_modules/eslint/node_modules/eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
"eslint-visitor-keys": "^1.1.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
"integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/eslint/node_modules/estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/eslint/node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.3"
"node": ">=6"
},
"engines": {
"node": ">=10.13.0"
"funding": {
"url": "https://github.com/sponsors/mysticatea"
}
},
"node_modules/eslint/node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/eslint/node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
"node": ">=4"
}
},
"node_modules/eslint/node_modules/strip-ansi": {
@ -16467,38 +16429,26 @@
}
},
"node_modules/espree": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
"integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"dependencies": {
"acorn": "^8.5.0",
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^3.0.0"
"eslint-visitor-keys": "^1.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/espree/node_modules/acorn": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
"integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
"node": ">=4"
}
},
"node_modules/esprima": {
@ -19459,9 +19409,9 @@
}
},
"node_modules/globals": {
"version": "13.11.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
"integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
"integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@ -24108,6 +24058,12 @@
"integrity": "sha1-j/TexTLYJIavWVc8OURZFOlEp/E=",
"dev": true
},
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
"dev": true
},
"node_modules/lodash.uppercase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz",
@ -30754,6 +30710,32 @@
"node": ">=8"
}
},
"node_modules/slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
"is-fullwidth-code-point": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/snake-case": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
@ -32074,6 +32056,104 @@
"node": ">=8"
}
},
"node_modules/table": {
"version": "6.7.2",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
"integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==",
"dev": true,
"dependencies": {
"ajv": "^8.0.1",
"lodash.clonedeep": "^4.5.0",
"lodash.truncate": "^4.4.2",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/table/node_modules/ajv": {
"version": "8.6.3",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
"integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/table/node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/table/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/table/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/table/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/table/node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/table/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/table/node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/taffydb": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz",
@ -37922,14 +38002,14 @@
"integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA=="
},
"@eslint/eslintrc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz",
"integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==",
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
"integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.0.0",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
@ -39899,9 +39979,9 @@
}
},
"@humanwhocodes/config-array": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz",
"integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==",
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
"integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.0",
@ -46185,6 +46265,12 @@
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"optional": true
},
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
"async": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
@ -49496,36 +49582,37 @@
}
},
"eslint": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz",
"integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==",
"version": "7.32.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
"integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
"dev": true,
"requires": {
"@eslint/eslintrc": "^1.0.3",
"@humanwhocodes/config-array": "^0.6.0",
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3",
"@humanwhocodes/config-array": "^0.5.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"debug": "^4.0.1",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^6.0.0",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.0.0",
"espree": "^9.0.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^2.1.0",
"eslint-visitor-keys": "^2.0.0",
"espree": "^7.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^6.0.1",
"glob-parent": "^5.1.2",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"js-yaml": "^4.1.0",
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
@ -49533,10 +49620,11 @@
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
"regexpp": "^3.2.0",
"regexpp": "^3.1.0",
"semver": "^7.2.1",
"strip-ansi": "^6.0.0",
"strip-json-comments": "^3.1.0",
"table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
@ -49547,12 +49635,6 @@
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@ -49563,53 +49645,21 @@
"supports-color": "^7.1.0"
}
},
"eslint-scope": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz",
"integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==",
"eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
}
},
"eslint-visitor-keys": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
"integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
"dev": true
},
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true
},
"glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"requires": {
"is-glob": "^4.0.3"
}
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"requires": {
"argparse": "^2.0.1"
"eslint-visitor-keys": "^1.1.0"
},
"dependencies": {
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
}
}
},
"strip-ansi": {
@ -50520,26 +50570,20 @@
"dev": true
},
"espree": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz",
"integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==",
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"requires": {
"acorn": "^8.5.0",
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^3.0.0"
"eslint-visitor-keys": "^1.3.0"
},
"dependencies": {
"acorn": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true
},
"eslint-visitor-keys": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz",
"integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
}
}
@ -52937,9 +52981,9 @@
}
},
"globals": {
"version": "13.11.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
"integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
"integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@ -56721,6 +56765,12 @@
"integrity": "sha1-j/TexTLYJIavWVc8OURZFOlEp/E=",
"dev": true
},
"lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
"dev": true
},
"lodash.uppercase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz",
@ -62144,6 +62194,25 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"devOptional": true
},
"slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
"is-fullwidth-code-point": "^3.0.0"
},
"dependencies": {
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
}
}
},
"snake-case": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
@ -63229,6 +63298,84 @@
"node-fetch": "^2.6.1"
}
},
"table": {
"version": "6.7.2",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
"integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==",
"dev": true,
"requires": {
"ajv": "^8.0.1",
"lodash.clonedeep": "^4.5.0",
"lodash.truncate": "^4.4.2",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1"
},
"dependencies": {
"ajv": {
"version": "8.6.3",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
"integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
}
},
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.1"
}
}
}
},
"taffydb": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz",

View File

@ -7,11 +7,9 @@ type Token @entity {
cap: BigDecimal #
supply: BigDecimal #
isDatatoken: Boolean! #
factory: DatatokenFactory #
owner: String # address of ERC721 that owns the token, valid only for datatokens
minter: [String] # array of addresses with minter role, can be user wallet address, dispenser etc.
minter: [User!] # array of addresses with minter role, can be user wallet address, dispenser etc.
feeManager: String # TODO: maybe we change name , depends on audit results . It's the address that collects the payments (NOT fees)
publishMarketFeeAddress: String # address of the market where the datatoken was created. This address collects market fees.
publishMarketFeeToken: String # adreess of fee token (can be Ocean, ETH, etc.)
@ -26,53 +24,35 @@ type Token @entity {
block: Int # Block number when it was created
}
type TokenValue {
type TokenValuePair @entity {
id : ID!
token : Token!
value : BigDecimal!
}
type NftToken @entity{
id: ID! #
type Nft @entity{
id: ID! # nft address
symbol: String! #
name: String! #
address: String!
tokenUri: String! #
owner: String!
owner: String! # owner of the nft
address: String! #
providerUrl: String # provider url that can decrypt the ddo
assetState: Int! # state of the asset (described in docs)
managerRole: [String]
erc20DeployerRole: [String]
storeUpdateRole: [String]
metadataRole: [String] # addresses that can update the metadata
}
managerRole: [String!]
erc20DeployerRole: [String!]
storeUpdateRole: [String!]
metadataRole: [String!] # addresses that can update the metadata
#TODO: do we need factories in general? We can move statistics on global object, check if we use them in a way
type PoolFactory @entity {
id: ID!
totalValueLocked: [TokenValue] # total value locked represented in the base token
totalLiquidity: [TokenValue] # total liquidity for each base token
totalSwapVolume: [TokenValue] # total swap volume for each base token
totalSwapFee: [TokenValue] # All the swap fee in Ocean
poolCount: Int! # Number of pools
finalizedPoolCount: Int! # Number of finalized pools
orderCount: BigInt # Number of total consumes
totalOrderVolume: BigDecimal # probably remove due to inconsistencies and imposibility to calculate
pools: [Pool!] @derivedFrom(field: "factoryID")
}
type DatatokenFactory @entity {
id: ID!
tokenCount: Int! # Number of datatokens
datatokens: [Tokens!] @derivedFrom(field: "factory")
template: String! # template address
createTime: Int! # Block time pool was created
tx: Bytes # Pool creation transaction id
block: Int # Block number when it was created
}
type Pool @entity {
id: ID! # Pool address
poolFactory: PoolFactory! # Pool factory
owner: String! # Owner address, pool controller
isPublicSwap: Boolean! # if swap/trade is activated, probably always true
@ -86,16 +66,16 @@ type Pool @entity {
poolFee: BigDecimal! # Pool Fee percent, fee goes to all liquidity providers : SWAP, JOIN , EXIT
opfFee: BigDecimal! # OPF Fee percent, fee that goes to Ocean Protocol Foundation : SWAP
marketFee: BigDecimal! # Market fee percent, fee that goes to the market where the pool was created : SWAP
totalPoolFee: [TokenValue!]! # actual value of fee collected in both tokens
totalOpfFee: [TokenValue!]! # actual value of fee collected in both tokens
totalMarketFee: [TokenValue!]! # actual value of fee collected in both tokens
totalPoolFee: [TokenValuePair!]! # actual value of fee collected in both tokens
totalOpfFee: [TokenValuePair!]! # actual value of fee collected in both tokens
totalMarketFee: [TokenValuePair!]! # actual value of fee collected in both tokens
currentOpfFee: [TokenValue!]! # fee after collection totalFee - colectedFee
currentMarketFee: [TokenValue!]! # fee after collection totalFee - colectedFee
currentOpfFee: [TokenValuePair!]! # fee after collection totalFee - colectedFee
currentMarketFee: [TokenValuePair!]! # fee after collection totalFee - colectedFee
totalWeight: BigDecimal! # it's always 100
totalShares: BigDecimal! # Total pool token shares
totalSwapVolume: [TokenValue!]! # total tokens that were swaped
totalSwapVolume: [TokenValuePair!]! # total tokens that were swaped
spotPrice: BigDecimal! # spot price
@ -109,8 +89,8 @@ type Pool @entity {
block: Int # Block number when it was created
# split in basetokne and datatoken like in fre
tokens: [PoolToken!] @derivedFrom(field: "poolId")
shares: [PoolShare!] @derivedFrom(field: "poolId")
tokens: [PoolToken!] @derivedFrom(field: "pool")
shares: [PoolShare!] @derivedFrom(field: "pool")
transactions: [PoolTransaction!] @derivedFrom(field: "pool")
}
@ -152,7 +132,7 @@ type PoolTransaction @entity {
gasPrice: BigDecimal!
# change to baseToken and dataToken
tokens: [TokenValue!] # tokens transfered , if value is negative it means it was removed.
tokens: [TokenValuePair!] # tokens transfered , if value is negative it means it was removed.
}
type Order @entity { # renamed from TokenOrder to Order
@ -196,7 +176,7 @@ type TokenTransaction @entity {
type User @entity {
id: ID!
sharesOwned: [PoolShare!] @derivedFrom(field: "user")
tokenBalancesOwned: [TokenValue!]
tokenBalancesOwned: [TokenValuePair!]
tokensOwned: [Token!] @derivedFrom(field: "minter")
poolTransactions: [PoolTransaction!] @derivedFrom(field: "user")
orders: [Order!] @derivedFrom(field: "payer")
@ -205,7 +185,7 @@ type User @entity {
type FixedRateExchange @entity {
id: ID! # fixed rate exchange id
exchangeOwner: User!
owner: User!
datatoken: Token!
baseToken: Token!
price: BigDecimal!
@ -263,7 +243,7 @@ type Dispenser @entity {
maxBalance: BigDecimal! # max balance of requester. If the balance is higher, the dispense is rejected
balance: BigDecimal! # how many tokens are left
dispenses: [DispenserTransaction!] @derivedFrom(field: "dispenserId")
dispenses: [DispenserTransaction!] @derivedFrom(field: "dispenser")
}
type DispenserTransaction @entity {
@ -300,20 +280,21 @@ type PoolSnapshotTokenValue @entity {
type Global @entity {
id: ID!
totalValueLocked: [TokenValuePair] # total value locked represented in the base token , basically 2x liqudity for each base token
totalLiquidity: [TokenValuePair] # total liquidity for each base token
totalSwapVolume: [TokenValuePair] # total swap volume for each base token. pools and fre
totalValueLocked: [TokenValuePair!] # total value locked represented in the base token , basically 2x liqudity for each base token
totalLiquidity: [TokenValuePair!] # total liquidity for each base token
totalSwapVolume: [TokenValuePair!] # total swap volume for each base token. pools and fre
orderCount: BigInt # Number of total consumes, pools + fre
poolCount: Int! # Number of pools for all factories
finalizedPoolCount: Int! # Number of finalized pools for all factories
totalOrderVolume: BigDecimal # probably remove due to inconsistencies and imposibility to calculate
}
type MetadataUpdate @entity {
id: ID! # update tx + datatokenAddress
datatokenId: Datatoken!
datatoken: Token!
datatokenAddress: String!
userAddress: String!

View File

@ -4,46 +4,25 @@ var fs = require('fs')
async function replaceContractAddresses() {
// load barge addresses first
try {
const data = JSON.parse(fs.readFileSync(process.env.ADDRESS_FILE, 'utf8'))
const data = JSON.parse(
fs.readFileSync(
'/home/mihai/.ocean/ocean-contracts/artifacts/address.json',
'utf8'
)
)
const {
DTFactory,
// eslint-disable-next-line no-unused-vars
BFactory,
// eslint-disable-next-line no-unused-vars
FixedRateExchange,
// eslint-disable-next-line no-unused-vars
Metadata,
// eslint-disable-next-line no-unused-vars
Dispenser
ERC721Factory
} = data.development
let subgraph = fs.readFileSync('subgraph.yaml', 'utf8')
if (!data) {
return false
}
// BFactory
// ERC721Factory
subgraph = subgraph.replace(
/0xbe0083053744ECb871510C88dC0f6b77Da162706/g,
BFactory
)
// dt factory
subgraph = subgraph.replace(
/0x57317f97E9EA49eBd19f7c9bB7c180b8cDcbDeB9/g,
DTFactory
)
// metadata
subgraph = subgraph.replace(
/0x1a4b70d8c9DcA47cD6D0Fb3c52BB8634CA1C0Fdf/g,
Metadata
)
// fixed rate exchgage
subgraph = subgraph.replace(
/0x608d05214E42722B94a54cF6114d4840FCfF84e1/g,
FixedRateExchange
)
// dispenser
subgraph = subgraph.replace(
/0xDEfD0018969cd2d4E648209F876ADe184815f038/g,
Dispenser
/0x17d55A3501999FFBF9b0623cDB258611419d01F5/g,
ERC721Factory
)
// network
subgraph = subgraph.replace(/network: mainnet/g, 'network: barge')

View File

@ -1,31 +1,4 @@
import {
BigDecimal,
BigInt,
Bytes,
dataSource,
Address,
ethereum,
log
} from '@graphprotocol/graph-ts'
import {
Pool as PoolEntity,
User,
PoolToken,
PoolShare,
PoolTransaction,
PoolFactory,
Datatoken,
TokenBalance,
TokenTransaction,
PoolTransactionTokenValues,
Global
} from './@types/schema'
import { Pool } from './@types/templates/Pool/Pool'
import { ERC20 } from './@types/templates/Pool/ERC20'
import { ERC20SymbolBytes } from './@types/templates/Pool/ERC20SymbolBytes'
import { ERC20NameBytes } from './@types/templates/Pool/ERC20NameBytes'
import { BigDecimal, BigInt, dataSource } from '@graphprotocol/graph-ts'
export const ZERO_BD = BigDecimal.fromString('0.0')
export const MINUS_1_BD = BigDecimal.fromString('-1.0')
@ -62,36 +35,36 @@ export function getOceanAddress(): string {
export const OCEAN: string = getOceanAddress()
export function getGlobalStats(): Global {
let gStats: Global | null = Global.load('1')
if (gStats == null) {
gStats = new Global('1')
gStats.totalOceanLiquidity = ZERO_BD
gStats.totalSwapVolume = ZERO_BD
gStats.totalValueLocked = ZERO_BD
gStats.totalOrderVolume = ZERO_BD
gStats.orderCount = BigInt.fromI32(0)
gStats.poolCount = 0
}
// export function getGlobalStats(): Global {
// let gStats: Global | null = Global.load('1')
// if (gStats == null) {
// gStats = new Global('1')
// gStats.totalOceanLiquidity = ZERO_BD
// gStats.totalSwapVolume = ZERO_BD
// gStats.totalValueLocked = ZERO_BD
// gStats.totalOrderVolume = ZERO_BD
// gStats.orderCount = BigInt.fromI32(0)
// gStats.poolCount = 0
// }
return gStats
}
// return gStats
// }
export function hexToDecimal(hexString: string, decimals: i32): BigDecimal {
const bytes = Bytes.fromHexString(hexString.toString()).reverse() as Bytes
const bi = BigInt.fromUnsignedBytes(bytes)
const scale = BigInt.fromI32(10)
.pow(decimals as u8)
.toBigDecimal()
return bi.divDecimal(scale)
}
// export function hexToDecimal(hexString: string, decimals: i32): BigDecimal {
// const bytes = Bytes.fromHexString(hexString.toString()).reverse() as Bytes
// const bi = BigInt.fromUnsignedBytes(bytes)
// const scale = BigInt.fromI32(10)
// .pow(decimals as u8)
// .toBigDecimal()
// return bi.divDecimal(scale)
// }
export function bigIntToDecimal(amount: BigInt, decimals: i32): BigDecimal {
const scale = BigInt.fromI32(10)
.pow(decimals as u8)
.toBigDecimal()
return amount.toBigDecimal().div(scale)
}
// export function bigIntToDecimal(amount: BigInt, decimals: i32): BigDecimal {
// const scale = BigInt.fromI32(10)
// .pow(decimals as u8)
// .toBigDecimal()
// return amount.toBigDecimal().div(scale)
// }
export function tokenToDecimal(amount: BigDecimal, decimals: i32): BigDecimal {
const scale = BigInt.fromI32(10)
@ -100,379 +73,379 @@ export function tokenToDecimal(amount: BigDecimal, decimals: i32): BigDecimal {
return amount.div(scale)
}
export function decimalToBigInt(value: BigDecimal): BigInt {
value.truncate(18)
const scale = BigInt.fromI32(10).pow((value.exp.toI32() + 18) as u8)
return value.digits.times(scale)
}
// export function decimalToBigInt(value: BigDecimal): BigInt {
// value.truncate(18)
// const scale = BigInt.fromI32(10).pow((value.exp.toI32() + 18) as u8)
// return value.digits.times(scale)
// }
export function isNullEthValue(value: string): boolean {
return (
value ==
'0x0000000000000000000000000000000000000000000000000000000000000001'
)
}
// export function isNullEthValue(value: string): boolean {
// return (
// value ==
// '0x0000000000000000000000000000000000000000000000000000000000000001'
// )
// }
export function getTokenSymbol(tokenAddress: Address): string {
const contract = ERC20.bind(tokenAddress)
const contractSymbolBytes = ERC20SymbolBytes.bind(tokenAddress)
// export function getTokenSymbol(tokenAddress: Address): string {
// const contract = ERC20.bind(tokenAddress)
// const contractSymbolBytes = ERC20SymbolBytes.bind(tokenAddress)
// try types string and bytes32 for symbol
let symbolValue = 'unknown'
const symbolResult = contract.try_symbol()
if (symbolResult.reverted) {
const symbolResultBytes = contractSymbolBytes.try_symbol()
if (!symbolResultBytes.reverted) {
// for broken pairs that have no symbol function exposed
if (!isNullEthValue(symbolResultBytes.value.toHexString())) {
symbolValue = symbolResultBytes.value.toString()
}
}
} else {
symbolValue = symbolResult.value
}
// // try types string and bytes32 for symbol
// let symbolValue = 'unknown'
// const symbolResult = contract.try_symbol()
// if (symbolResult.reverted) {
// const symbolResultBytes = contractSymbolBytes.try_symbol()
// if (!symbolResultBytes.reverted) {
// // for broken pairs that have no symbol function exposed
// if (!isNullEthValue(symbolResultBytes.value.toHexString())) {
// symbolValue = symbolResultBytes.value.toString()
// }
// }
// } else {
// symbolValue = symbolResult.value
// }
return symbolValue
}
// return symbolValue
// }
export function getTokenName(tokenAddress: Address): string {
const contract = ERC20.bind(tokenAddress)
const contractNameBytes = ERC20NameBytes.bind(tokenAddress)
// export function getTokenName(tokenAddress: Address): string {
// const contract = ERC20.bind(tokenAddress)
// const contractNameBytes = ERC20NameBytes.bind(tokenAddress)
// try types string and bytes32 for name
let nameValue = 'unknown'
const nameResult = contract.try_name()
if (nameResult.reverted) {
const nameResultBytes = contractNameBytes.try_name()
if (!nameResultBytes.reverted) {
// for broken exchanges that have no name function exposed
if (!isNullEthValue(nameResultBytes.value.toHexString())) {
nameValue = nameResultBytes.value.toString()
}
}
} else {
nameValue = nameResult.value
}
// // try types string and bytes32 for name
// let nameValue = 'unknown'
// const nameResult = contract.try_name()
// if (nameResult.reverted) {
// const nameResultBytes = contractNameBytes.try_name()
// if (!nameResultBytes.reverted) {
// // for broken exchanges that have no name function exposed
// if (!isNullEthValue(nameResultBytes.value.toHexString())) {
// nameValue = nameResultBytes.value.toString()
// }
// }
// } else {
// nameValue = nameResult.value
// }
return nameValue
}
// return nameValue
// }
export function getTokenDecimals(tokenAddress: Address): i32 {
const contract = ERC20.bind(tokenAddress)
let decimals = 18
const decimalCall = contract.try_decimals()
if (!decimalCall.reverted) {
decimals = decimalCall.value
}
return decimals
}
// export function getTokenDecimals(tokenAddress: Address): i32 {
// const contract = ERC20.bind(tokenAddress)
// let decimals = 18
// const decimalCall = contract.try_decimals()
// if (!decimalCall.reverted) {
// decimals = decimalCall.value
// }
// return decimals
// }
export function updatePoolTokenBalance(
poolToken: PoolToken,
balance: BigDecimal,
source: string
): void {
if (!poolToken) return
if (balance < ZERO_BD || poolToken.balance < ZERO_BD) {
poolToken.balance = balance
}
}
// export function updatePoolTokenBalance(
// poolToken: PoolToken,
// balance: BigDecimal,
// source: string
// ): void {
// if (!poolToken) return
// if (balance < ZERO_BD || poolToken.balance < ZERO_BD) {
// poolToken.balance = balance
// }
// }
export function createUserEntity(address: string): void {
if (User.load(address) == null) {
const user = new User(address)
user.nrSales = 0
user.save()
}
}
// export function createUserEntity(address: string): void {
// if (User.load(address) == null) {
// const user = new User(address)
// user.nrSales = 0
// user.save()
// }
// }
export function createPoolShareEntity(
id: string,
pool: string,
user: string
): void {
const poolShare = new PoolShare(id)
// export function createPoolShareEntity(
// id: string,
// pool: string,
// user: string
// ): void {
// const poolShare = new PoolShare(id)
createUserEntity(user)
// createUserEntity(user)
poolShare.userAddress = user
poolShare.poolId = pool
poolShare.balance = ZERO_BD
poolShare.save()
}
// poolShare.userAddress = user
// poolShare.poolId = pool
// poolShare.balance = ZERO_BD
// poolShare.save()
// }
export function createPoolTokenEntity(
id: string,
pool: string,
address: Address
): void {
const datatoken = Datatoken.load(address.toHexString())
// export function createPoolTokenEntity(
// id: string,
// pool: string,
// address: Address
// ): void {
// const datatoken = Datatoken.load(address.toHexString())
const poolToken = new PoolToken(id)
poolToken.poolId = pool
poolToken.isDatatoken = !!datatoken
poolToken.tokenId = datatoken ? datatoken.id : ''
poolToken.address = address.toHexString()
poolToken.balance = ZERO_BD
poolToken.denormWeight = ZERO_BD
poolToken.symbol = getTokenSymbol(address)
poolToken.name = getTokenName(address)
poolToken.decimals = getTokenDecimals(address)
poolToken.save()
}
// const poolToken = new PoolToken(id)
// poolToken.poolId = pool
// poolToken.isDatatoken = !!datatoken
// poolToken.tokenId = datatoken ? datatoken.id : ''
// poolToken.address = address.toHexString()
// poolToken.balance = ZERO_BD
// poolToken.denormWeight = ZERO_BD
// poolToken.symbol = getTokenSymbol(address)
// poolToken.name = getTokenName(address)
// poolToken.decimals = getTokenDecimals(address)
// poolToken.save()
// }
export function updatePoolTransactionToken(
poolTx: string,
poolTokenId: string,
amount: BigDecimal,
balance: BigDecimal,
feeValue: BigDecimal
): void {
const ptx = PoolTransaction.load(poolTx)
const poolToken = PoolToken.load(poolTokenId)
// export function updatePoolTransactionToken(
// poolTx: string,
// poolTokenId: string,
// amount: BigDecimal,
// balance: BigDecimal,
// feeValue: BigDecimal
// ): void {
// const ptx = PoolTransaction.load(poolTx)
// const poolToken = PoolToken.load(poolTokenId)
if (!ptx) {
log.error('Cannot load PoolTransaction {}', [poolTx])
return
}
// if (!ptx) {
// log.error('Cannot load PoolTransaction {}', [poolTx])
// return
// }
if (!poolToken) {
log.error('Cannot load PoolToken {}', [poolTokenId])
return
}
const pool = PoolEntity.load(poolToken.poolId)
if (!pool) {
log.error('Cannot load PoolEntity {}', [poolToken.poolId])
return
}
const ptxTokenValuesId = poolTx.concat('-').concat(poolTokenId)
let ptxTokenValues = PoolTransactionTokenValues.load(ptxTokenValuesId)
if (ptxTokenValues == null) {
ptxTokenValues = new PoolTransactionTokenValues(ptxTokenValuesId)
log.warning('created PoolTransactionTokenValues for {}', [ptxTokenValuesId])
}
// if (!poolToken) {
// log.error('Cannot load PoolToken {}', [poolTokenId])
// return
// }
// const pool = PoolEntity.load(poolToken.poolId)
// if (!pool) {
// log.error('Cannot load PoolEntity {}', [poolToken.poolId])
// return
// }
// const ptxTokenValuesId = poolTx.concat('-').concat(poolTokenId)
// let ptxTokenValues = PoolTransactionTokenValues.load(ptxTokenValuesId)
// if (ptxTokenValues == null) {
// ptxTokenValues = new PoolTransactionTokenValues(ptxTokenValuesId)
// log.warning('created PoolTransactionTokenValues for {}', [ptxTokenValuesId])
// }
if (!ptxTokenValues) return
// if (!ptxTokenValues) return
ptxTokenValues.txId = poolTx
ptxTokenValues.poolToken = poolTokenId
ptxTokenValues.poolAddress = poolToken.poolId
const ptxUserAddress = ptx.userAddress
ptxTokenValues.userAddress = ptxUserAddress ? ptxUserAddress : ''
const poolTokenAddress = poolToken.address
ptxTokenValues.tokenAddress = poolTokenAddress ? poolTokenAddress : ''
// ptxTokenValues.txId = poolTx
// ptxTokenValues.poolToken = poolTokenId
// ptxTokenValues.poolAddress = poolToken.poolId
// const ptxUserAddress = ptx.userAddress
// ptxTokenValues.userAddress = ptxUserAddress ? ptxUserAddress : ''
// const poolTokenAddress = poolToken.address
// ptxTokenValues.tokenAddress = poolTokenAddress ? poolTokenAddress : ''
ptxTokenValues.value = amount
ptxTokenValues.tokenReserve = balance
ptxTokenValues.feeValue = feeValue
if (amount.lt(ZERO_BD)) {
ptxTokenValues.type = 'out'
} else {
ptxTokenValues.type = 'in'
}
// ptxTokenValues.value = amount
// ptxTokenValues.tokenReserve = balance
// ptxTokenValues.feeValue = feeValue
// if (amount.lt(ZERO_BD)) {
// ptxTokenValues.type = 'out'
// } else {
// ptxTokenValues.type = 'in'
// }
ptxTokenValues.save()
// ptxTokenValues.save()
if (ptxTokenValues.tokenAddress == OCEAN) {
const factory = PoolFactory.load('1')
if (factory !== null) {
factory.totalOceanLiquidity = factory.totalOceanLiquidity
.plus(ptxTokenValues.tokenReserve)
.minus(pool.oceanReserve)
// if (ptxTokenValues.tokenAddress == OCEAN) {
// const factory = PoolFactory.load('1')
// if (factory !== null) {
// factory.totalOceanLiquidity = factory.totalOceanLiquidity
// .plus(ptxTokenValues.tokenReserve)
// .minus(pool.oceanReserve)
const gStats: Global = getGlobalStats()
if (gStats !== null) {
gStats.totalOceanLiquidity = factory.totalOceanLiquidity
// const gStats: Global = getGlobalStats()
// if (gStats !== null) {
// gStats.totalOceanLiquidity = factory.totalOceanLiquidity
gStats.save()
}
// gStats.save()
// }
ptx.oceanReserve = ptxTokenValues.tokenReserve
pool.oceanReserve = ptxTokenValues.tokenReserve
factory.save()
}
} else {
ptx.datatokenReserve = ptxTokenValues.tokenReserve
pool.datatokenReserve = ptxTokenValues.tokenReserve
}
ptx.save()
pool.save()
}
// ptx.oceanReserve = ptxTokenValues.tokenReserve
// pool.oceanReserve = ptxTokenValues.tokenReserve
// factory.save()
// }
// } else {
// ptx.datatokenReserve = ptxTokenValues.tokenReserve
// pool.datatokenReserve = ptxTokenValues.tokenReserve
// }
// ptx.save()
// pool.save()
// }
export function calcSpotPrice(
balanceIn: BigDecimal,
wIn: BigDecimal,
balanceOut: BigDecimal,
wOut: BigDecimal,
swapFee: BigDecimal
): BigDecimal {
if (balanceIn <= ZERO_BD || balanceOut <= ZERO_BD) return MINUS_1_BD
// export function calcSpotPrice(
// balanceIn: BigDecimal,
// wIn: BigDecimal,
// balanceOut: BigDecimal,
// wOut: BigDecimal,
// swapFee: BigDecimal
// ): BigDecimal {
// if (balanceIn <= ZERO_BD || balanceOut <= ZERO_BD) return MINUS_1_BD
const numer = balanceIn.div(wIn)
const denom = balanceOut.div(wOut)
if (denom <= ZERO_BD) return MINUS_1_BD
// const numer = balanceIn.div(wIn)
// const denom = balanceOut.div(wOut)
// if (denom <= ZERO_BD) return MINUS_1_BD
const ratio = numer.div(denom)
const scale = ONE_BD.div(ONE_BD.minus(swapFee))
const price = ratio.times(scale)
price.truncate(18)
return price
}
// const ratio = numer.div(denom)
// const scale = ONE_BD.div(ONE_BD.minus(swapFee))
// const price = ratio.times(scale)
// price.truncate(18)
// return price
// }
export function createPoolTransaction(
event: ethereum.Event,
// eslint-disable-next-line camelcase
event_type: string,
userAddress: string
): void {
const poolId = event.address.toHex()
const pool = PoolEntity.load(poolId)
if (!pool) return
const ptx = event.transaction.hash.toHexString()
// export function createPoolTransaction(
// event: ethereum.Event,
// // eslint-disable-next-line camelcase
// event_type: string,
// userAddress: string
// ): void {
// const poolId = event.address.toHex()
// const pool = PoolEntity.load(poolId)
// if (!pool) return
// const ptx = event.transaction.hash.toHexString()
const ocnToken = PoolToken.load(poolId.concat('-').concat(OCEAN))
const dtToken = PoolToken.load(
poolId.concat('-').concat(pool.datatokenAddress)
)
if (ocnToken == null || dtToken == null) {
return
}
// const ocnToken = PoolToken.load(poolId.concat('-').concat(OCEAN))
// const dtToken = PoolToken.load(
// poolId.concat('-').concat(pool.datatokenAddress)
// )
// if (ocnToken == null || dtToken == null) {
// return
// }
let poolTx = PoolTransaction.load(ptx)
if (poolTx != null) {
return
}
poolTx = new PoolTransaction(ptx)
// let poolTx = PoolTransaction.load(ptx)
// if (poolTx != null) {
// return
// }
// poolTx = new PoolTransaction(ptx)
poolTx.poolAddress = poolId
poolTx.userAddress = userAddress
poolTx.poolAddressStr = poolId
poolTx.userAddressStr = userAddress
// poolTx.poolAddress = poolId
// poolTx.userAddress = userAddress
// poolTx.poolAddressStr = poolId
// poolTx.userAddressStr = userAddress
poolTx.sharesTransferAmount = ZERO_BD
poolTx.sharesBalance = ZERO_BD
// poolTx.sharesTransferAmount = ZERO_BD
// poolTx.sharesBalance = ZERO_BD
// pool.datatokenReserve = dtToken.balance
// pool.oceanReserve = ocnToken.balance
// Initial reserve values, will be updated in `updatePoolTransactionToken`
poolTx.datatokenReserve = dtToken.balance
poolTx.oceanReserve = ocnToken.balance
// // pool.datatokenReserve = dtToken.balance
// // pool.oceanReserve = ocnToken.balance
// // Initial reserve values, will be updated in `updatePoolTransactionToken`
// poolTx.datatokenReserve = dtToken.balance
// poolTx.oceanReserve = ocnToken.balance
const p = Pool.bind(Address.fromString(poolId))
// const p = Pool.bind(Address.fromString(poolId))
const priceResult = p.try_calcInGivenOut(
decimalToBigInt(ocnToken.balance),
decimalToBigInt(ocnToken.denormWeight),
decimalToBigInt(dtToken.balance),
decimalToBigInt(dtToken.denormWeight),
ONE_BASE_18,
decimalToBigInt(pool.swapFee)
)
// const priceResult = p.try_calcInGivenOut(
// decimalToBigInt(ocnToken.balance),
// decimalToBigInt(ocnToken.denormWeight),
// decimalToBigInt(dtToken.balance),
// decimalToBigInt(dtToken.denormWeight),
// ONE_BASE_18,
// decimalToBigInt(pool.swapFee)
// )
poolTx.consumePrice = priceResult.reverted
? MINUS_1_BD
: bigIntToDecimal(priceResult.value, 18)
// poolTx.consumePrice = priceResult.reverted
// ? MINUS_1_BD
// : bigIntToDecimal(priceResult.value, 18)
const priceSpot = p.try_calcSpotPrice(
decimalToBigInt(ocnToken.balance),
decimalToBigInt(ocnToken.denormWeight),
decimalToBigInt(dtToken.balance),
decimalToBigInt(dtToken.denormWeight),
decimalToBigInt(pool.swapFee)
)
poolTx.spotPrice = priceSpot.reverted
? ZERO_BD
: bigIntToDecimal(priceSpot.value, 18)
// const priceSpot = p.try_calcSpotPrice(
// decimalToBigInt(ocnToken.balance),
// decimalToBigInt(ocnToken.denormWeight),
// decimalToBigInt(dtToken.balance),
// decimalToBigInt(dtToken.denormWeight),
// decimalToBigInt(pool.swapFee)
// )
// poolTx.spotPrice = priceSpot.reverted
// ? ZERO_BD
// : bigIntToDecimal(priceSpot.value, 18)
pool.consumePrice = poolTx.consumePrice
pool.spotPrice = poolTx.spotPrice
const oldValueLocked = pool.valueLocked
const spotPrice = pool.spotPrice >= ZERO_BD ? pool.spotPrice : ZERO_BD
pool.valueLocked = poolTx.oceanReserve.plus(
poolTx.datatokenReserve.times(spotPrice)
)
const factory = PoolFactory.load('1')
if (!factory) return
if (factory.totalValueLocked !== null) {
const tvl = factory.totalValueLocked
// pool.consumePrice = poolTx.consumePrice
// pool.spotPrice = poolTx.spotPrice
// const oldValueLocked = pool.valueLocked
// const spotPrice = pool.spotPrice >= ZERO_BD ? pool.spotPrice : ZERO_BD
// pool.valueLocked = poolTx.oceanReserve.plus(
// poolTx.datatokenReserve.times(spotPrice)
// )
// const factory = PoolFactory.load('1')
// if (!factory) return
// if (factory.totalValueLocked !== null) {
// const tvl = factory.totalValueLocked
factory.totalValueLocked = tvl
? tvl.minus(oldValueLocked).plus(pool.valueLocked)
: BigDecimal.fromString('0')
}
// factory.totalValueLocked = tvl
// ? tvl.minus(oldValueLocked).plus(pool.valueLocked)
// : BigDecimal.fromString('0')
// }
const gStats: Global = getGlobalStats()
if (gStats !== null) {
gStats.totalValueLocked = factory.totalValueLocked
gStats.save()
}
// const gStats: Global = getGlobalStats()
// if (gStats !== null) {
// gStats.totalValueLocked = factory.totalValueLocked
// gStats.save()
// }
pool.transactionCount = pool.transactionCount.plus(BigInt.fromI32(1))
// pool.transactionCount = pool.transactionCount.plus(BigInt.fromI32(1))
pool.save()
factory.save()
// pool.save()
// factory.save()
poolTx.tx = event.transaction.hash
// eslint-disable-next-line camelcase
poolTx.event = event_type
poolTx.block = event.block.number.toI32()
poolTx.timestamp = event.block.timestamp.toI32()
// Property 'gasUsed' does not exist on type '~lib/@graphprotocol/graph-ts/chain/ethereum/ethereum.Transaction'
// poolTx.gasUsed = event.transaction.gasUsed.toBigDecimal()
poolTx.gasPrice = event.transaction.gasPrice.toBigDecimal()
// poolTx.tx = event.transaction.hash
// // eslint-disable-next-line camelcase
// poolTx.event = event_type
// poolTx.block = event.block.number.toI32()
// poolTx.timestamp = event.block.timestamp.toI32()
// // Property 'gasUsed' does not exist on type '~lib/@graphprotocol/graph-ts/chain/ethereum/ethereum.Transaction'
// // poolTx.gasUsed = event.transaction.gasUsed.toBigDecimal()
// poolTx.gasPrice = event.transaction.gasPrice.toBigDecimal()
poolTx.save()
}
// poolTx.save()
// }
export function decrPoolCount(finalized: boolean): void {
const factory = PoolFactory.load('1')
if (!factory) return
factory.poolCount -= 1
if (finalized) factory.finalizedPoolCount -= 1
factory.save()
}
// export function decrPoolCount(finalized: boolean): void {
// const factory = PoolFactory.load('1')
// if (!factory) return
// factory.poolCount -= 1
// if (finalized) factory.finalizedPoolCount -= 1
// factory.save()
// }
export function saveTokenTransaction(
event: ethereum.Event,
eventName: string
): void {
const tx = event.transaction.hash
.toHexString()
.concat('-')
.concat(event.logIndex.toString())
const userAddress = event.transaction.from.toHex()
let transaction = TokenTransaction.load(tx)
if (transaction == null) {
transaction = new TokenTransaction(tx)
}
transaction.event = eventName
transaction.datatokenAddress = event.address.toHex()
transaction.userAddress = userAddress
// transaction.gasUsed = event.transaction.gasUsed.toBigDecimal()
transaction.gasPrice = event.transaction.gasPrice.toBigDecimal()
transaction.tx = event.transaction.hash
transaction.timestamp = event.block.timestamp.toI32()
transaction.block = event.block.number.toI32()
transaction.save()
// export function saveTokenTransaction(
// event: ethereum.Event,
// eventName: string
// ): void {
// const tx = event.transaction.hash
// .toHexString()
// .concat('-')
// .concat(event.logIndex.toString())
// const userAddress = event.transaction.from.toHex()
// let transaction = TokenTransaction.load(tx)
// if (transaction == null) {
// transaction = new TokenTransaction(tx)
// }
// transaction.event = eventName
// transaction.datatokenAddress = event.address.toHex()
// transaction.userAddress = userAddress
// // transaction.gasUsed = event.transaction.gasUsed.toBigDecimal()
// transaction.gasPrice = event.transaction.gasPrice.toBigDecimal()
// transaction.tx = event.transaction.hash
// transaction.timestamp = event.block.timestamp.toI32()
// transaction.block = event.block.number.toI32()
// transaction.save()
createUserEntity(userAddress)
}
// createUserEntity(userAddress)
// }
export function updateTokenBalance(
id: string,
token: string,
user: string,
amount: BigDecimal
): void {
let tokenBalance = TokenBalance.load(id)
if (tokenBalance == null) {
tokenBalance = new TokenBalance(id)
createUserEntity(user)
tokenBalance.userAddress = user
tokenBalance.datatokenId = token
tokenBalance.balance = ZERO_BD
}
// export function updateTokenBalance(
// id: string,
// token: string,
// user: string,
// amount: BigDecimal
// ): void {
// let tokenBalance = TokenBalance.load(id)
// if (tokenBalance == null) {
// tokenBalance = new TokenBalance(id)
// createUserEntity(user)
// tokenBalance.userAddress = user
// tokenBalance.datatokenId = token
// tokenBalance.balance = ZERO_BD
// }
tokenBalance.balance = tokenBalance.balance.plus(amount)
tokenBalance.save()
}
// tokenBalance.balance = tokenBalance.balance.plus(amount)
// tokenBalance.save()
// }

View File

@ -0,0 +1,9 @@
import {
MinterApproved,
OrderStarted
} from '../@types/ERC20Template/ERC20Template'
// TODO: no events in contracts
export function handleMinterApproved(event: MinterApproved): void {}
// TODO: to complicated at this point, return after basic events implemented ¯\_(ツ)_/¯
export function handleOrderStarted(event: OrderStarted): void {}

View File

@ -0,0 +1,33 @@
import { log } from '@graphprotocol/graph-ts'
import { NFTCreated, TokenCreated } from '../@types/ERC721Factory/ERC721Factory'
import { Nft, Token } from '../@types/schema'
import { ZERO_BD } from '../helpers'
export function handleNftCreated(event: NFTCreated): void {
const nft = new Nft(event.params.newTokenAddress.toHexString())
nft.owner = event.params.admin.toHexString()
nft.address = event.params.newTokenAddress.toHexString()
nft.name = event.params.tokenName.toHex()
nft.symbol = ''
nft.createTime = event.block.timestamp.toI32()
nft.tx = event.transaction.hash
nft.block = event.block.number.toI32()
nft.save()
}
export function handleNewToken(event: TokenCreated): void {
const token = new Token(event.params.newTokenAddress.toHexString())
token.isDatatoken = true
token.address = event.params.newTokenAddress.toHexString()
token.createTime = event.block.timestamp.toI32()
token.tx = event.transaction.hash
token.block = event.block.number.toI32()
token.name = event.params.tokenName.toString()
token.decimals = 18
token.supply = ZERO_BD
log.info('dt name {} ', [event.params.tokenName.toString()])
token.save()
}

View File

@ -0,0 +1,11 @@
import { NewPool } from '../@types/ERC20Template/ERC20Template'
import { Pool } from '../@types/schema'
export function handleNewPool(event: NewPool): void {
const newPool = new Pool(event.params.poolAddress.toHex())
newPool.createTime = event.block.timestamp.toI32()
newPool.tx = event.transaction.hash
newPool.block = event.block.number.toI32()
newPool.save()
}

View File

@ -0,0 +1,23 @@
import { BigInt } from '@graphprotocol/graph-ts'
import { ExchangeCreated } from '../@types/FixedRateExchange/FixedRateExchange'
import { FixedRateExchange } from '../@types/schema'
import { tokenToDecimal } from '../helpers'
export function handleExchangeCreated(event: ExchangeCreated): void {
const fixedRateExchange = new FixedRateExchange(
event.params.exchangeId.toHexString()
)
fixedRateExchange.owner = event.params.exchangeOwner.toHexString()
fixedRateExchange.datatoken = event.params.dataToken.toHexString()
fixedRateExchange.baseToken = event.params.baseToken.toHexString()
// fixedRateExchange.baseTokenSymbol = getTokenSymbol(event.params.baseToken)
fixedRateExchange.active = false
fixedRateExchange.price = tokenToDecimal(
event.params.fixedRate.toBigDecimal(),
BigInt.fromI32(18).toI32()
)
fixedRateExchange.save()
}

View File

@ -1,135 +0,0 @@
import { BigInt, ethereum, log } from '@graphprotocol/graph-ts'
import {
ExchangeCreated,
ExchangeActivated,
ExchangeDeactivated,
ExchangeRateChanged,
Swapped
} from '../@types/FixedRateExchange/FixedRateExchange'
import {
FixedRateExchange,
FixedRateExchangeUpdate,
FixedRateExchangeSwap
} from '../@types/schema'
import { getTokenSymbol, tokenToDecimal } from '../helpers'
export function handleExchangeCreated(event: ExchangeCreated): void {
const fixedrateexchange = new FixedRateExchange(
event.params.exchangeId.toHexString()
)
fixedrateexchange.exchangeOwner = event.params.exchangeOwner.toHexString()
fixedrateexchange.datatoken = event.params.dataToken.toHexString()
fixedrateexchange.baseToken = event.params.baseToken.toHexString()
fixedrateexchange.baseTokenSymbol = getTokenSymbol(event.params.baseToken)
fixedrateexchange.active = false
log.info('new exchange with datatoken {} and base token {} ', [
fixedrateexchange.datatoken,
fixedrateexchange.baseToken
])
log.info('for new exchange {} for rate {}', [
event.params.exchangeId.toHexString(),
event.params.fixedRate.toString()
])
fixedrateexchange.rate = tokenToDecimal(
event.params.fixedRate.toBigDecimal(),
BigInt.fromI32(18).toI32()
)
fixedrateexchange.save()
}
function _processActiveUpdated(
event: ethereum.Event,
exchangeId: string,
active: boolean
): void {
const tx = event.transaction.hash
const id = tx.toHexString().concat('-').concat(exchangeId)
const fixedrateexchange = FixedRateExchange.load(exchangeId)
const freupdate = new FixedRateExchangeUpdate(id)
freupdate.exchangeId = exchangeId
if (fixedrateexchange) {
freupdate.oldRate = fixedrateexchange.rate
freupdate.newRate = fixedrateexchange.rate
freupdate.oldActive = fixedrateexchange.active
fixedrateexchange.active = active
fixedrateexchange.save()
}
freupdate.newActive = active
freupdate.block = event.block.number.toI32()
freupdate.timestamp = event.block.timestamp.toI32()
freupdate.tx = tx
freupdate.save()
}
export function handleExchangeActivated(event: ExchangeActivated): void {
_processActiveUpdated(event, event.params.exchangeId.toHexString(), true)
}
export function handleExchangeDeactivated(event: ExchangeDeactivated): void {
_processActiveUpdated(event, event.params.exchangeId.toHexString(), false)
}
export function handleExchangeRateChanged(event: ExchangeRateChanged): void {
const tx = event.transaction.hash
const id = tx
.toHexString()
.concat('-')
.concat(event.params.exchangeId.toHexString())
const fixedrateexchange = FixedRateExchange.load(
event.params.exchangeId.toHexString()
)
if (!fixedrateexchange) {
log.error('Cannot update unknown FRE {}', [
event.params.exchangeId.toHexString()
])
return
}
const freupdate = new FixedRateExchangeUpdate(id)
freupdate.exchangeId = fixedrateexchange.id
freupdate.oldRate = fixedrateexchange.rate
log.info('for new exchange {} for rate {}', [
id,
event.params.newRate.toString()
])
freupdate.newRate = tokenToDecimal(
event.params.newRate.toBigDecimal(),
BigInt.fromI32(18).toI32()
)
freupdate.oldActive = fixedrateexchange.active
freupdate.newActive = fixedrateexchange.active
freupdate.block = event.block.number.toI32()
freupdate.timestamp = event.block.timestamp.toI32()
freupdate.tx = tx
freupdate.save()
fixedrateexchange.rate = freupdate.newRate
fixedrateexchange.save()
}
export function handleSwapped(event: Swapped): void {
const tx = event.transaction.hash
const id = tx
.toHexString()
.concat('-')
.concat(event.params.exchangeId.toHexString())
const freSwap = new FixedRateExchangeSwap(id)
freSwap.exchangeId = event.params.exchangeId.toHexString()
freSwap.by = event.params.by.toHexString()
freSwap.baseTokenAmount = tokenToDecimal(
event.params.baseTokenSwappedAmount.toBigDecimal(),
BigInt.fromI32(18).toI32()
)
freSwap.dataTokenAmount = tokenToDecimal(
event.params.dataTokenSwappedAmount.toBigDecimal(),
BigInt.fromI32(18).toI32()
)
freSwap.block = event.block.number.toI32()
freSwap.timestamp = event.block.timestamp.toI32()
freSwap.tx = tx
freSwap.save()
}

View File

@ -14,9 +14,9 @@ import {
DispenserTransaction,
User,
Datatoken
} from '../@types/schema'
} from '../../@types/schema'
import { tokenToDecimal } from '../helpers'
import { tokenToDecimal } from '../../helpers'
function _processDispenserUpdate(
event: ethereum.Event,

577
src/mappings/old/pool.ts Normal file
View File

@ -0,0 +1,577 @@
// import { BigInt, Address, BigDecimal, log } from '@graphprotocol/graph-ts'
// import {
// LOG_CALL,
// LOG_JOIN,
// LOG_EXIT,
// LOG_SWAP,
// Transfer,
// Pool as PoolEntity
// } from '../@types/templates/Pool/Pool'
// import {
// PoolFactory,
// Pool,
// PoolToken,
// PoolShare,
// Datatoken,
// PoolTransaction,
// Global
// } from '../@types/schema'
// import {
// hexToDecimal,
// tokenToDecimal,
// createPoolShareEntity,
// createPoolTokenEntity,
// ZERO_BD,
// MINUS_1_BD,
// decrPoolCount,
// updatePoolTransactionToken,
// createPoolTransaction,
// OCEAN,
// updatePoolTokenBalance,
// getOceanAddress,
// getGlobalStats,
// bigIntToDecimal
// } from '../helpers'
// /************************************
// ********** Pool Controls ***********
// ************************************/
// export function handleSetSwapFee(
// event: LOG_CALL,
// swapFeeStr: string | null = null
// ): void {
// const poolId = event.address.toHex()
// const pool = Pool.load(poolId)
// if (!pool) return
// if (!swapFeeStr) {
// swapFeeStr = event.params.data.toHexString().slice(-40)
// }
// if (swapFeeStr !== null) pool.swapFee = hexToDecimal(swapFeeStr, 18)
// pool.save()
// }
// export function handleSetController(event: LOG_CALL): void {
// const poolId = event.address.toHex()
// const pool = Pool.load(poolId)
// if (!pool) return
// pool.controller = Address.fromString(
// event.params.data.toHexString().slice(-40)
// )
// pool.save()
// }
// export function handleSetPublicSwap(event: LOG_CALL): void {
// const poolId = event.address.toHex()
// const pool = Pool.load(poolId)
// if (!pool) return
// pool.publicSwap = event.params.data.toHexString().slice(-1) == '1'
// pool.save()
// }
// export function handleFinalize(event: LOG_CALL): void {
// const poolId = event.address.toHex()
// const pool = Pool.load(poolId)
// if (!pool) {
// log.error('Cannot handle finalize for unknown pool {} ', [poolId])
// return
// }
// if (pool.tokenCount == BigInt.fromI32(0)) {
// log.error('Cannot mark pool {} finalized, because we have 0 tokenCount', [
// poolId
// ])
// return
// }
// pool.finalized = true
// pool.symbol = 'BPT'
// pool.publicSwap = true
// pool.save()
// const factory = PoolFactory.load('1')
// if (!factory) return
// factory.finalizedPoolCount = factory.finalizedPoolCount + 1
// factory.save()
// }
// export function _handleRebind(
// event: LOG_CALL,
// poolId: string,
// tokenAddress: string,
// balanceStr: string,
// denormWeightStr: string
// ): void {
// const pool = Pool.load(poolId)
// if (!pool) return
// const decimals = BigInt.fromI32(18).toI32()
// if (tokenAddress != OCEAN) {
// pool.datatokenAddress = tokenAddress
// }
// pool.tokenCount = pool.tokenCount.plus(BigInt.fromI32(1))
// const address = Address.fromString(tokenAddress)
// const denormWeight = hexToDecimal(denormWeightStr, decimals)
// const poolTokenId = poolId.concat('-').concat(address.toHexString())
// let poolToken = PoolToken.load(poolTokenId)
// if (poolToken == null) {
// createPoolTokenEntity(poolTokenId, poolId, address)
// poolToken = PoolToken.load(poolTokenId)
// pool.totalWeight = pool.totalWeight.plus(denormWeight)
// } else {
// const oldWeight = poolToken.denormWeight
// if (denormWeight > oldWeight) {
// pool.totalWeight = pool.totalWeight.plus(denormWeight).minus(oldWeight)
// } else {
// pool.totalWeight = pool.totalWeight.minus(oldWeight).minus(denormWeight)
// }
// }
// if (!poolToken) return
// poolToken.denormWeight =
// denormWeight !== null ? denormWeight : BigDecimal.fromString('0')
// const balance = hexToDecimal(balanceStr, decimals)
// updatePoolTokenBalance(poolToken as PoolToken, balance, '_handleRebind')
// poolToken.save()
// if (balance.equals(ZERO_BD)) {
// decrPoolCount(pool.finalized)
// pool.active = false
// }
// pool.save()
// }
// export function handleRebind(event: LOG_CALL): void {
// const poolId = event.address.toHex()
// _handleRebind(
// event,
// poolId,
// event.params.data.toHexString().slice(34, 74),
// event.params.data.toHexString().slice(74, 138),
// event.params.data.toHexString().slice(138)
// )
// }
// export function handleSetup(event: LOG_CALL): void {
// if (PoolTransaction.load(event.transaction.hash.toHexString()) != null) {
// return
// }
// const poolId = event.address.toHex()
// const data = event.params.data.toHexString()
// // First 2 chars are 0x
// // Next there is 8 chars
// // Next starts the data each params occupies exactly 64 chars
// // Each value is padded with 0s to the left
// // For an Address, need to remove the leading 24 zeros, because the address itself is 40 chars
// // For numbers we donot need to remove the leading zeros because they have no effect being on the left of the number
// // skip 8 then take the last 40 (2 + 8 + 24 = 34) to (2 + 8 + 64 = 74)
// const dataTokenAddress = Address.fromString(data.slice(34, 74)).toHexString()
// const dataTokenAmount = data.slice(74, 138) // 74+64
// const dataTokenWeight = data.slice(138, 202) // (74+64,74+(2*64)
// const baseTokenAddress = Address.fromString(
// data.slice(202 + 24, 266)
// ).toHexString() // (74+(2*64)+24, 74+(3*64))
// const baseTokenAmount = data.slice(266, 330) // (74+(3*64),74+(4*64))
// const baseTokenWeight = data.slice(330, 394) // (74+(4*64),74+(5*64))
// const swapFee = data.slice(394) // (74+(5*64), END)
// if (baseTokenAddress != OCEAN) {
// log.error('baseTokenAddress is not Ocean, but is {}', [baseTokenAddress])
// return
// }
// const poolTokenId = poolId.concat('-').concat(baseTokenAddress)
// const poolToken = PoolToken.load(poolTokenId)
// if (!poolToken) return
// _handleRebind(
// event,
// poolId,
// dataTokenAddress,
// dataTokenAmount,
// dataTokenWeight
// )
// _handleRebind(
// event,
// poolId,
// baseTokenAddress,
// baseTokenAmount,
// baseTokenWeight
// )
// handleSetSwapFee(event, swapFee)
// handleFinalize(event)
// createPoolTransaction(event, 'setup', event.transaction.from.toHex())
// // update base token
// let amount = hexToDecimal(baseTokenAmount, 18)
// const poolTokenBalance = poolToken.balance
// const balance = poolTokenBalance
// ? poolTokenBalance
// : BigDecimal.fromString('0')
// updatePoolTransactionToken(
// event.transaction.hash.toHexString(),
// poolTokenId,
// amount,
// balance,
// ZERO_BD
// )
// // update the datatoken
// const poolDataToken = PoolToken.load(
// poolId.concat('-').concat(dataTokenAddress)
// )
// if (poolDataToken !== null) {
// amount = hexToDecimal(dataTokenAmount, 18)
// updatePoolTransactionToken(
// event.transaction.hash.toHexString(),
// poolId.concat('-').concat(dataTokenAddress),
// amount,
// poolDataToken.balance,
// ZERO_BD
// )
// }
// }
// /************************************
// ********** JOINS & EXITS ***********
// ************************************/
// export function handleJoinPool(event: LOG_JOIN): void {
// const poolId = event.address.toHex()
// const address = event.params.tokenIn.toHex()
// const ptx = event.transaction.hash.toHexString()
// const poolTokenId = poolId.concat('-').concat(address)
// const poolToken = PoolToken.load(poolTokenId)
// const pool = Pool.load(poolId)
// const datatoken = Datatoken.load(poolTokenId)
// const poolTx = PoolTransaction.load(ptx)
// if (poolTx !== null) return
// if (!pool || !poolToken || !datatoken) return
// if (pool.finalized == false) {
// return
// }
// pool.joinCount = pool.joinCount.plus(BigInt.fromI32(1))
// pool.save()
// const decimals =
// datatoken == null ? BigInt.fromI32(18).toI32() : datatoken.decimals
// const tokenAmountIn = tokenToDecimal(
// event.params.tokenAmountIn.toBigDecimal(),
// decimals
// )
// updatePoolTokenBalance(
// poolToken as PoolToken,
// poolToken.balance.plus(tokenAmountIn),
// 'handleJoinPool'
// )
// poolToken.save()
// createPoolTransaction(event, 'join', event.params.caller.toHexString())
// updatePoolTransactionToken(
// event.transaction.hash.toHexString(),
// poolTokenId,
// tokenAmountIn,
// poolToken.balance,
// tokenAmountIn.times(pool.swapFee)
// )
// }
// export function handleExitPool(event: LOG_EXIT): void {
// const poolId = event.address.toHex()
// const address = event.params.tokenOut.toHex()
// const poolTokenId = poolId.concat('-').concat(address.toString())
// const pool = Pool.load(poolId)
// const poolToken = PoolToken.load(poolTokenId)
// const datatoken = Datatoken.load(poolTokenId)
// if (!poolToken || !pool || !datatoken) {
// return
// }
// const decimals =
// datatoken == null ? BigInt.fromI32(18).toI32() : datatoken.decimals
// const tokenAmountOut = tokenToDecimal(
// event.params.tokenAmountOut.toBigDecimal(),
// decimals
// )
// const newAmount = poolToken.balance.minus(tokenAmountOut)
// updatePoolTokenBalance(poolToken as PoolToken, newAmount, 'handleExitPool')
// poolToken.save()
// pool.exitCount = pool.exitCount.plus(BigInt.fromI32(1))
// if (newAmount.equals(ZERO_BD)) {
// decrPoolCount(pool.finalized)
// pool.active = false
// }
// pool.save()
// createPoolTransaction(event, 'exit', event.params.caller.toHexString())
// updatePoolTransactionToken(
// event.transaction.hash.toHexString(),
// poolTokenId,
// tokenAmountOut.times(MINUS_1_BD),
// poolToken.balance,
// tokenAmountOut.times(pool.swapFee)
// )
// }
// /************************************
// ************** SWAPS ***************
// ************************************/
// export function handleSwap(event: LOG_SWAP): void {
// const poolId = event.address.toHex()
// const ptx = event.transaction.hash.toHexString()
// const tokenIn = event.params.tokenIn.toHex()
// const poolTokenInId = poolId.concat('-').concat(tokenIn.toString())
// const poolTokenIn = PoolToken.load(poolTokenInId)
// if (!poolTokenIn) {
// return
// }
// const dtIn = Datatoken.load(tokenIn)
// const tokenAmountIn = tokenToDecimal(
// event.params.tokenAmountIn.toBigDecimal(),
// dtIn == null ? 18 : dtIn.decimals
// )
// const newAmountIn = poolTokenIn.balance.plus(tokenAmountIn)
// updatePoolTokenBalance(
// poolTokenIn as PoolToken,
// newAmountIn,
// 'handleSwap.tokenIn'
// )
// poolTokenIn.save()
// const tokenOut = event.params.tokenOut.toHex()
// const poolTokenOutId = poolId.concat('-').concat(tokenOut.toString())
// const poolTokenOut = PoolToken.load(poolTokenOutId)
// const pool = Pool.load(poolId)
// const factory = PoolFactory.load('1')
// const dtOut = Datatoken.load(tokenOut)
// if (!poolTokenOut || !dtOut || !factory || !pool) return
// const tokenAmountOut = tokenToDecimal(
// event.params.tokenAmountOut.toBigDecimal(),
// dtOut == null ? 18 : dtOut.decimals
// )
// const newAmountOut = poolTokenOut.balance.minus(tokenAmountOut)
// updatePoolTokenBalance(
// poolTokenOut as PoolToken,
// newAmountOut,
// 'handleSwap.tokenOut'
// )
// poolTokenOut.save()
// pool.swapCount = pool.swapCount.plus(BigInt.fromI32(1))
// if (newAmountIn.equals(ZERO_BD) || newAmountOut.equals(ZERO_BD)) {
// decrPoolCount(pool.finalized)
// pool.active = false
// }
// if (tokenIn === getOceanAddress()) {
// pool.totalSwapVolume = pool.totalSwapVolume.plus(tokenAmountIn)
// factory.totalSwapVolume = factory.totalSwapVolume.plus(tokenAmountIn)
// } else {
// pool.totalSwapVolume = pool.totalSwapVolume.plus(tokenAmountOut)
// factory.totalSwapVolume = factory.totalSwapVolume.plus(tokenAmountOut)
// }
// factory.save()
// pool.save()
// const gStats: Global = getGlobalStats()
// if (gStats !== null) {
// gStats.totalSwapVolume = factory.totalSwapVolume
// gStats.save()
// }
// createPoolTransaction(event, 'swap', event.params.caller.toHexString())
// updatePoolTransactionToken(
// ptx,
// poolTokenIn.id,
// tokenAmountIn,
// poolTokenIn.balance,
// tokenAmountIn.times(pool.swapFee)
// )
// updatePoolTransactionToken(
// ptx,
// poolTokenOut.id,
// tokenAmountOut.times(MINUS_1_BD),
// poolTokenOut.balance,
// BigDecimal.fromString('0.0')
// )
// }
// /************************************
// *********** POOL SHARES ************
// ************************************/
// export function handleTransfer(event: Transfer): void {
// const poolId = event.address.toHex()
// const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
// const isMint = event.params.from.toHex() == ZERO_ADDRESS
// const isBurn = event.params.to.toHex() == ZERO_ADDRESS
// const poolShareFromId = poolId.concat('-').concat(event.params.from.toHex())
// let poolShareFrom = PoolShare.load(poolShareFromId)
// const poolShareToId = poolId.concat('-').concat(event.params.to.toHex())
// let poolShareTo = PoolShare.load(poolShareToId)
// const poolShareToBalance = poolShareTo == null ? ZERO_BD : poolShareTo.balance
// const pool = Pool.load(poolId)
// if (!pool) return
// const poolTx = PoolTransaction.load(event.transaction.hash.toHexString())
// const value = tokenToDecimal(event.params.value.toBigDecimal(), 18)
// if (isMint) {
// if (poolShareTo == null) {
// createPoolShareEntity(poolShareToId, poolId, event.params.to.toHex())
// poolShareTo = PoolShare.load(poolShareToId)
// }
// if (poolShareTo !== null) {
// poolShareTo.balance = poolShareTo.balance.plus(value)
// poolShareTo.save()
// }
// pool.totalShares = pool.totalShares.plus(value)
// if (poolTx != null) {
// poolTx.sharesTransferAmount = value
// if (poolShareTo !== null) poolTx.sharesBalance = poolShareTo.balance
// }
// } else if (isBurn) {
// if (poolShareFrom == null) {
// createPoolShareEntity(poolShareFromId, poolId, event.params.from.toHex())
// poolShareFrom = PoolShare.load(poolShareFromId)
// }
// pool.totalShares = pool.totalShares.minus(value)
// if (poolTx !== null) {
// poolTx.sharesTransferAmount = poolTx.sharesTransferAmount.minus(value)
// }
// if (poolTx !== null && poolShareFrom !== null) {
// poolTx.sharesBalance = poolShareFrom.balance
// }
// if (poolShareFrom !== null) {
// poolShareFrom.balance = poolShareFrom.balance.minus(value)
// poolShareFrom.save()
// }
// } else {
// if (poolShareTo == null) {
// createPoolShareEntity(poolShareToId, poolId, event.params.to.toHex())
// poolShareTo = PoolShare.load(poolShareToId)
// }
// if (poolShareTo !== null) {
// poolShareTo.balance = poolShareTo.balance.plus(value)
// poolShareTo.save()
// }
// if (poolShareFrom == null) {
// createPoolShareEntity(poolShareFromId, poolId, event.params.from.toHex())
// poolShareFrom = PoolShare.load(poolShareFromId)
// }
// if (poolShareFrom !== null) {
// poolShareFrom.balance = poolShareFrom.balance.minus(value)
// poolShareFrom.save()
// }
// }
// if (
// poolShareTo != null &&
// poolShareTo.balance.notEqual(ZERO_BD) &&
// poolShareToBalance.equals(ZERO_BD)
// ) {
// pool.holderCount = pool.holderCount.plus(BigInt.fromI32(1))
// }
// if (
// poolShareFrom !== null &&
// poolShareFrom.balance.equals(ZERO_BD) &&
// poolShareFrom.balance.notEqual(ZERO_BD)
// ) {
// pool.holderCount = pool.holderCount.plus(BigInt.fromI32(1))
// }
// if (poolTx !== null) {
// poolTx.save()
// }
// pool.save()
// }
// /************************************
// *********** GULP ************
// ************************************/
// export function handleGulp(event: LOG_CALL): void {
// const poolId = event.address.toHex()
// const ptx = event.transaction.hash.toHexString()
// // we need to check the contract balance & compare with our internal balances
// const pool = Pool.load(poolId)
// const poolEbtity = PoolEntity.bind(Address.fromString(poolId))
// if (!pool) {
// log.warning('Gulp called, but cannot load pool {}', [poolId])
// return
// }
// const ocnToken = PoolToken.load(poolId.concat('-').concat(OCEAN))
// const dtToken = PoolToken.load(
// poolId.concat('-').concat(pool.datatokenAddress)
// )
// // get the balances from the contract
// // for ocean
// if (ocnToken) {
// const ocnTokenBalance = ocnToken.balance
// const balanceAttempt = poolEbtity.try_getBalance(Address.fromString(OCEAN))
// if (!balanceAttempt.reverted) {
// const contractBalance = bigIntToDecimal(balanceAttempt.value, 18)
// if (
// ocnToken.balance.notEqual(contractBalance) &&
// contractBalance.ge(ZERO_BD)
// ) {
// // we have a difference. let's absorb that
// createPoolTransaction(event, 'gulp', event.params.caller.toHexString())
// ocnToken.balance = contractBalance
// ocnToken.save()
// updatePoolTransactionToken(
// ptx,
// ocnToken.id,
// contractBalance.minus(ocnTokenBalance),
// contractBalance,
// ZERO_BD
// )
// }
// }
// }
// // for dt
// if (dtToken) {
// const dtTokenBalance = dtToken.balance
// const balanceAttempt = poolEbtity.try_getBalance(
// Address.fromString(pool.datatokenAddress)
// )
// if (!balanceAttempt.reverted) {
// const contractBalance = bigIntToDecimal(balanceAttempt.value, 18)
// if (
// dtToken.balance.notEqual(contractBalance) &&
// contractBalance.ge(ZERO_BD)
// ) {
// // we have a difference. let's absorb that
// createPoolTransaction(event, 'gulp', event.params.caller.toHexString())
// dtToken.balance = contractBalance
// dtToken.save()
// updatePoolTransactionToken(
// ptx,
// dtToken.id,
// contractBalance.minus(dtTokenBalance),
// contractBalance,
// ZERO_BD
// )
// }
// }
// }
// }

View File

@ -1,577 +0,0 @@
import { BigInt, Address, BigDecimal, log } from '@graphprotocol/graph-ts'
import {
LOG_CALL,
LOG_JOIN,
LOG_EXIT,
LOG_SWAP,
Transfer,
Pool as PoolEntity
} from '../@types/templates/Pool/Pool'
import {
PoolFactory,
Pool,
PoolToken,
PoolShare,
Datatoken,
PoolTransaction,
Global
} from '../@types/schema'
import {
hexToDecimal,
tokenToDecimal,
createPoolShareEntity,
createPoolTokenEntity,
ZERO_BD,
MINUS_1_BD,
decrPoolCount,
updatePoolTransactionToken,
createPoolTransaction,
OCEAN,
updatePoolTokenBalance,
getOceanAddress,
getGlobalStats,
bigIntToDecimal
} from '../helpers'
/************************************
********** Pool Controls ***********
************************************/
export function handleSetSwapFee(
event: LOG_CALL,
swapFeeStr: string | null = null
): void {
const poolId = event.address.toHex()
const pool = Pool.load(poolId)
if (!pool) return
if (!swapFeeStr) {
swapFeeStr = event.params.data.toHexString().slice(-40)
}
if (swapFeeStr !== null) pool.swapFee = hexToDecimal(swapFeeStr, 18)
pool.save()
}
export function handleSetController(event: LOG_CALL): void {
const poolId = event.address.toHex()
const pool = Pool.load(poolId)
if (!pool) return
pool.controller = Address.fromString(
event.params.data.toHexString().slice(-40)
)
pool.save()
}
export function handleSetPublicSwap(event: LOG_CALL): void {
const poolId = event.address.toHex()
const pool = Pool.load(poolId)
if (!pool) return
pool.publicSwap = event.params.data.toHexString().slice(-1) == '1'
pool.save()
}
export function handleFinalize(event: LOG_CALL): void {
const poolId = event.address.toHex()
const pool = Pool.load(poolId)
if (!pool) {
log.error('Cannot handle finalize for unknown pool {} ', [poolId])
return
}
if (pool.tokenCount == BigInt.fromI32(0)) {
log.error('Cannot mark pool {} finalized, because we have 0 tokenCount', [
poolId
])
return
}
pool.finalized = true
pool.symbol = 'BPT'
pool.publicSwap = true
pool.save()
const factory = PoolFactory.load('1')
if (!factory) return
factory.finalizedPoolCount = factory.finalizedPoolCount + 1
factory.save()
}
export function _handleRebind(
event: LOG_CALL,
poolId: string,
tokenAddress: string,
balanceStr: string,
denormWeightStr: string
): void {
const pool = Pool.load(poolId)
if (!pool) return
const decimals = BigInt.fromI32(18).toI32()
if (tokenAddress != OCEAN) {
pool.datatokenAddress = tokenAddress
}
pool.tokenCount = pool.tokenCount.plus(BigInt.fromI32(1))
const address = Address.fromString(tokenAddress)
const denormWeight = hexToDecimal(denormWeightStr, decimals)
const poolTokenId = poolId.concat('-').concat(address.toHexString())
let poolToken = PoolToken.load(poolTokenId)
if (poolToken == null) {
createPoolTokenEntity(poolTokenId, poolId, address)
poolToken = PoolToken.load(poolTokenId)
pool.totalWeight = pool.totalWeight.plus(denormWeight)
} else {
const oldWeight = poolToken.denormWeight
if (denormWeight > oldWeight) {
pool.totalWeight = pool.totalWeight.plus(denormWeight).minus(oldWeight)
} else {
pool.totalWeight = pool.totalWeight.minus(oldWeight).minus(denormWeight)
}
}
if (!poolToken) return
poolToken.denormWeight =
denormWeight !== null ? denormWeight : BigDecimal.fromString('0')
const balance = hexToDecimal(balanceStr, decimals)
updatePoolTokenBalance(poolToken as PoolToken, balance, '_handleRebind')
poolToken.save()
if (balance.equals(ZERO_BD)) {
decrPoolCount(pool.finalized)
pool.active = false
}
pool.save()
}
export function handleRebind(event: LOG_CALL): void {
const poolId = event.address.toHex()
_handleRebind(
event,
poolId,
event.params.data.toHexString().slice(34, 74),
event.params.data.toHexString().slice(74, 138),
event.params.data.toHexString().slice(138)
)
}
export function handleSetup(event: LOG_CALL): void {
if (PoolTransaction.load(event.transaction.hash.toHexString()) != null) {
return
}
const poolId = event.address.toHex()
const data = event.params.data.toHexString()
// First 2 chars are 0x
// Next there is 8 chars
// Next starts the data each params occupies exactly 64 chars
// Each value is padded with 0s to the left
// For an Address, need to remove the leading 24 zeros, because the address itself is 40 chars
// For numbers we donot need to remove the leading zeros because they have no effect being on the left of the number
// skip 8 then take the last 40 (2 + 8 + 24 = 34) to (2 + 8 + 64 = 74)
const dataTokenAddress = Address.fromString(data.slice(34, 74)).toHexString()
const dataTokenAmount = data.slice(74, 138) // 74+64
const dataTokenWeight = data.slice(138, 202) // (74+64,74+(2*64)
const baseTokenAddress = Address.fromString(
data.slice(202 + 24, 266)
).toHexString() // (74+(2*64)+24, 74+(3*64))
const baseTokenAmount = data.slice(266, 330) // (74+(3*64),74+(4*64))
const baseTokenWeight = data.slice(330, 394) // (74+(4*64),74+(5*64))
const swapFee = data.slice(394) // (74+(5*64), END)
if (baseTokenAddress != OCEAN) {
log.error('baseTokenAddress is not Ocean, but is {}', [baseTokenAddress])
return
}
const poolTokenId = poolId.concat('-').concat(baseTokenAddress)
const poolToken = PoolToken.load(poolTokenId)
if (!poolToken) return
_handleRebind(
event,
poolId,
dataTokenAddress,
dataTokenAmount,
dataTokenWeight
)
_handleRebind(
event,
poolId,
baseTokenAddress,
baseTokenAmount,
baseTokenWeight
)
handleSetSwapFee(event, swapFee)
handleFinalize(event)
createPoolTransaction(event, 'setup', event.transaction.from.toHex())
// update base token
let amount = hexToDecimal(baseTokenAmount, 18)
const poolTokenBalance = poolToken.balance
const balance = poolTokenBalance
? poolTokenBalance
: BigDecimal.fromString('0')
updatePoolTransactionToken(
event.transaction.hash.toHexString(),
poolTokenId,
amount,
balance,
ZERO_BD
)
// update the datatoken
const poolDataToken = PoolToken.load(
poolId.concat('-').concat(dataTokenAddress)
)
if (poolDataToken !== null) {
amount = hexToDecimal(dataTokenAmount, 18)
updatePoolTransactionToken(
event.transaction.hash.toHexString(),
poolId.concat('-').concat(dataTokenAddress),
amount,
poolDataToken.balance,
ZERO_BD
)
}
}
/************************************
********** JOINS & EXITS ***********
************************************/
export function handleJoinPool(event: LOG_JOIN): void {
const poolId = event.address.toHex()
const address = event.params.tokenIn.toHex()
const ptx = event.transaction.hash.toHexString()
const poolTokenId = poolId.concat('-').concat(address)
const poolToken = PoolToken.load(poolTokenId)
const pool = Pool.load(poolId)
const datatoken = Datatoken.load(poolTokenId)
const poolTx = PoolTransaction.load(ptx)
if (poolTx !== null) return
if (!pool || !poolToken || !datatoken) return
if (pool.finalized == false) {
return
}
pool.joinCount = pool.joinCount.plus(BigInt.fromI32(1))
pool.save()
const decimals =
datatoken == null ? BigInt.fromI32(18).toI32() : datatoken.decimals
const tokenAmountIn = tokenToDecimal(
event.params.tokenAmountIn.toBigDecimal(),
decimals
)
updatePoolTokenBalance(
poolToken as PoolToken,
poolToken.balance.plus(tokenAmountIn),
'handleJoinPool'
)
poolToken.save()
createPoolTransaction(event, 'join', event.params.caller.toHexString())
updatePoolTransactionToken(
event.transaction.hash.toHexString(),
poolTokenId,
tokenAmountIn,
poolToken.balance,
tokenAmountIn.times(pool.swapFee)
)
}
export function handleExitPool(event: LOG_EXIT): void {
const poolId = event.address.toHex()
const address = event.params.tokenOut.toHex()
const poolTokenId = poolId.concat('-').concat(address.toString())
const pool = Pool.load(poolId)
const poolToken = PoolToken.load(poolTokenId)
const datatoken = Datatoken.load(poolTokenId)
if (!poolToken || !pool || !datatoken) {
return
}
const decimals =
datatoken == null ? BigInt.fromI32(18).toI32() : datatoken.decimals
const tokenAmountOut = tokenToDecimal(
event.params.tokenAmountOut.toBigDecimal(),
decimals
)
const newAmount = poolToken.balance.minus(tokenAmountOut)
updatePoolTokenBalance(poolToken as PoolToken, newAmount, 'handleExitPool')
poolToken.save()
pool.exitCount = pool.exitCount.plus(BigInt.fromI32(1))
if (newAmount.equals(ZERO_BD)) {
decrPoolCount(pool.finalized)
pool.active = false
}
pool.save()
createPoolTransaction(event, 'exit', event.params.caller.toHexString())
updatePoolTransactionToken(
event.transaction.hash.toHexString(),
poolTokenId,
tokenAmountOut.times(MINUS_1_BD),
poolToken.balance,
tokenAmountOut.times(pool.swapFee)
)
}
/************************************
************** SWAPS ***************
************************************/
export function handleSwap(event: LOG_SWAP): void {
const poolId = event.address.toHex()
const ptx = event.transaction.hash.toHexString()
const tokenIn = event.params.tokenIn.toHex()
const poolTokenInId = poolId.concat('-').concat(tokenIn.toString())
const poolTokenIn = PoolToken.load(poolTokenInId)
if (!poolTokenIn) {
return
}
const dtIn = Datatoken.load(tokenIn)
const tokenAmountIn = tokenToDecimal(
event.params.tokenAmountIn.toBigDecimal(),
dtIn == null ? 18 : dtIn.decimals
)
const newAmountIn = poolTokenIn.balance.plus(tokenAmountIn)
updatePoolTokenBalance(
poolTokenIn as PoolToken,
newAmountIn,
'handleSwap.tokenIn'
)
poolTokenIn.save()
const tokenOut = event.params.tokenOut.toHex()
const poolTokenOutId = poolId.concat('-').concat(tokenOut.toString())
const poolTokenOut = PoolToken.load(poolTokenOutId)
const pool = Pool.load(poolId)
const factory = PoolFactory.load('1')
const dtOut = Datatoken.load(tokenOut)
if (!poolTokenOut || !dtOut || !factory || !pool) return
const tokenAmountOut = tokenToDecimal(
event.params.tokenAmountOut.toBigDecimal(),
dtOut == null ? 18 : dtOut.decimals
)
const newAmountOut = poolTokenOut.balance.minus(tokenAmountOut)
updatePoolTokenBalance(
poolTokenOut as PoolToken,
newAmountOut,
'handleSwap.tokenOut'
)
poolTokenOut.save()
pool.swapCount = pool.swapCount.plus(BigInt.fromI32(1))
if (newAmountIn.equals(ZERO_BD) || newAmountOut.equals(ZERO_BD)) {
decrPoolCount(pool.finalized)
pool.active = false
}
if (tokenIn === getOceanAddress()) {
pool.totalSwapVolume = pool.totalSwapVolume.plus(tokenAmountIn)
factory.totalSwapVolume = factory.totalSwapVolume.plus(tokenAmountIn)
} else {
pool.totalSwapVolume = pool.totalSwapVolume.plus(tokenAmountOut)
factory.totalSwapVolume = factory.totalSwapVolume.plus(tokenAmountOut)
}
factory.save()
pool.save()
const gStats: Global = getGlobalStats()
if (gStats !== null) {
gStats.totalSwapVolume = factory.totalSwapVolume
gStats.save()
}
createPoolTransaction(event, 'swap', event.params.caller.toHexString())
updatePoolTransactionToken(
ptx,
poolTokenIn.id,
tokenAmountIn,
poolTokenIn.balance,
tokenAmountIn.times(pool.swapFee)
)
updatePoolTransactionToken(
ptx,
poolTokenOut.id,
tokenAmountOut.times(MINUS_1_BD),
poolTokenOut.balance,
BigDecimal.fromString('0.0')
)
}
/************************************
*********** POOL SHARES ************
************************************/
export function handleTransfer(event: Transfer): void {
const poolId = event.address.toHex()
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
const isMint = event.params.from.toHex() == ZERO_ADDRESS
const isBurn = event.params.to.toHex() == ZERO_ADDRESS
const poolShareFromId = poolId.concat('-').concat(event.params.from.toHex())
let poolShareFrom = PoolShare.load(poolShareFromId)
const poolShareToId = poolId.concat('-').concat(event.params.to.toHex())
let poolShareTo = PoolShare.load(poolShareToId)
const poolShareToBalance = poolShareTo == null ? ZERO_BD : poolShareTo.balance
const pool = Pool.load(poolId)
if (!pool) return
const poolTx = PoolTransaction.load(event.transaction.hash.toHexString())
const value = tokenToDecimal(event.params.value.toBigDecimal(), 18)
if (isMint) {
if (poolShareTo == null) {
createPoolShareEntity(poolShareToId, poolId, event.params.to.toHex())
poolShareTo = PoolShare.load(poolShareToId)
}
if (poolShareTo !== null) {
poolShareTo.balance = poolShareTo.balance.plus(value)
poolShareTo.save()
}
pool.totalShares = pool.totalShares.plus(value)
if (poolTx != null) {
poolTx.sharesTransferAmount = value
if (poolShareTo !== null) poolTx.sharesBalance = poolShareTo.balance
}
} else if (isBurn) {
if (poolShareFrom == null) {
createPoolShareEntity(poolShareFromId, poolId, event.params.from.toHex())
poolShareFrom = PoolShare.load(poolShareFromId)
}
pool.totalShares = pool.totalShares.minus(value)
if (poolTx !== null) {
poolTx.sharesTransferAmount = poolTx.sharesTransferAmount.minus(value)
}
if (poolTx !== null && poolShareFrom !== null) {
poolTx.sharesBalance = poolShareFrom.balance
}
if (poolShareFrom !== null) {
poolShareFrom.balance = poolShareFrom.balance.minus(value)
poolShareFrom.save()
}
} else {
if (poolShareTo == null) {
createPoolShareEntity(poolShareToId, poolId, event.params.to.toHex())
poolShareTo = PoolShare.load(poolShareToId)
}
if (poolShareTo !== null) {
poolShareTo.balance = poolShareTo.balance.plus(value)
poolShareTo.save()
}
if (poolShareFrom == null) {
createPoolShareEntity(poolShareFromId, poolId, event.params.from.toHex())
poolShareFrom = PoolShare.load(poolShareFromId)
}
if (poolShareFrom !== null) {
poolShareFrom.balance = poolShareFrom.balance.minus(value)
poolShareFrom.save()
}
}
if (
poolShareTo != null &&
poolShareTo.balance.notEqual(ZERO_BD) &&
poolShareToBalance.equals(ZERO_BD)
) {
pool.holderCount = pool.holderCount.plus(BigInt.fromI32(1))
}
if (
poolShareFrom !== null &&
poolShareFrom.balance.equals(ZERO_BD) &&
poolShareFrom.balance.notEqual(ZERO_BD)
) {
pool.holderCount = pool.holderCount.plus(BigInt.fromI32(1))
}
if (poolTx !== null) {
poolTx.save()
}
pool.save()
}
/************************************
*********** GULP ************
************************************/
export function handleGulp(event: LOG_CALL): void {
const poolId = event.address.toHex()
const ptx = event.transaction.hash.toHexString()
// we need to check the contract balance & compare with our internal balances
const pool = Pool.load(poolId)
const poolEbtity = PoolEntity.bind(Address.fromString(poolId))
if (!pool) {
log.warning('Gulp called, but cannot load pool {}', [poolId])
return
}
const ocnToken = PoolToken.load(poolId.concat('-').concat(OCEAN))
const dtToken = PoolToken.load(
poolId.concat('-').concat(pool.datatokenAddress)
)
// get the balances from the contract
// for ocean
if (ocnToken) {
const ocnTokenBalance = ocnToken.balance
const balanceAttempt = poolEbtity.try_getBalance(Address.fromString(OCEAN))
if (!balanceAttempt.reverted) {
const contractBalance = bigIntToDecimal(balanceAttempt.value, 18)
if (
ocnToken.balance.notEqual(contractBalance) &&
contractBalance.ge(ZERO_BD)
) {
// we have a difference. let's absorb that
createPoolTransaction(event, 'gulp', event.params.caller.toHexString())
ocnToken.balance = contractBalance
ocnToken.save()
updatePoolTransactionToken(
ptx,
ocnToken.id,
contractBalance.minus(ocnTokenBalance),
contractBalance,
ZERO_BD
)
}
}
}
// for dt
if (dtToken) {
const dtTokenBalance = dtToken.balance
const balanceAttempt = poolEbtity.try_getBalance(
Address.fromString(pool.datatokenAddress)
)
if (!balanceAttempt.reverted) {
const contractBalance = bigIntToDecimal(balanceAttempt.value, 18)
if (
dtToken.balance.notEqual(contractBalance) &&
contractBalance.ge(ZERO_BD)
) {
// we have a difference. let's absorb that
createPoolTransaction(event, 'gulp', event.params.caller.toHexString())
dtToken.balance = contractBalance
dtToken.save()
updatePoolTransactionToken(
ptx,
dtToken.id,
contractBalance.minus(dtTokenBalance),
contractBalance,
ZERO_BD
)
}
}
}
}

View File

@ -1,213 +1,89 @@
specVersion: 0.0.2
specVersion: 0.0.3
description: Ocean provides data sharing through IDOs
repository: https://github.com/oceanprotocol/ocean-subgraph
schema:
file: ./schema.graphql
dataSources:
- kind: ethereum/contract
name: Factory
network: mainnet
name: ERC721Factory
network: barge
source:
address: '0xbe0083053744ECb871510C88dC0f6b77Da162706'
abi: Factory
startBlock: 11105585
address: '0x0599a4a2873B38D836E10302De1ca4834F7BDF4E'
abi: ERC721Factory
startBlock: 0
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/factory.ts
file: ./src/mappings/erc721Factory.ts
entities:
- PoolFactory
- ERC721Factory
abis:
- name: Factory
file: ./abis/BFactory.json
- name: ERC721Factory
file: ./abis/ERC721Factory.json
eventHandlers:
- event: BPoolRegistered(address,indexed address)
handler: handleNewPool
- kind: ethereum/contract
name: DTFactory
network: mainnet
source:
address: '0x57317f97E9EA49eBd19f7c9bB7c180b8cDcbDeB9'
abi: DTFactory
startBlock: 11105560
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/dtfactory.ts
entities:
- DatatokenFactory
abis:
- name: DTFactory
file: ./abis/DTFactory.json
eventHandlers:
- event: TokenRegistered(indexed address,string,string,uint256,indexed address,indexed string)
- event: NFTCreated(indexed address,indexed address,indexed string,address)
handler: handleNftCreated
- event: TokenCreated(indexed address,indexed address,indexed string)
handler: handleNewToken
- kind: ethereum/contract
name: Metadata
network: mainnet
source:
address: '0x1a4b70d8c9DcA47cD6D0Fb3c52BB8634CA1C0Fdf'
abi: Metadata
startBlock: 11105610
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/metadata.ts
entities:
- Metadata
abis:
- name: Metadata
file: ./abis/Metadata.json
eventHandlers:
- event: MetadataCreated(indexed address,indexed address,bytes,bytes)
handler: handleMetadataCreated
- event: MetadataUpdated(indexed address,indexed address,bytes,bytes)
handler: handleMetadataUpdated
- kind: ethereum/contract
name: FixedRateExchange
network: mainnet
network: barge
source:
address: '0x608d05214E42722B94a54cF6114d4840FCfF84e1'
address: '0x2356DeCd8CFB6c6f2bf46b5ED4531818B4662337'
abi: FixedRateExchange
startBlock: 11105610
startBlock: 0
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/fixedrateexchange.ts
file: ./src/mappings/fixedRateExchange.ts
entities:
- FixedRateExchange
abis:
- name: FixedRateExchange
file: ./abis/FixedRateExchange.json
- name: ERC20
file: ./abis/ERC20.json
- name: ERC20SymbolBytes
file: ./abis/ERC20SymbolBytes.json
- name: ERC20NameBytes
file: ./abis/ERC20NameBytes.json
eventHandlers:
- event: ExchangeCreated(indexed bytes32,indexed address,indexed address,address,uint256)
handler: handleExchangeCreated
- event: ExchangeActivated(indexed bytes32,indexed address)
handler: handleExchangeActivated
- event: ExchangeDeactivated(indexed bytes32,indexed address)
handler: handleExchangeDeactivated
- event: ExchangeRateChanged(indexed bytes32,indexed address,uint256)
handler: handleExchangeRateChanged
- event: Swapped(indexed bytes32,indexed address,uint256,uint256)
handler: handleSwapped
- kind: ethereum/contract
name: Dispenser
network: mainnet
name: FactoryRouter
network: barge
source:
address: '0xDEfD0018969cd2d4E648209F876ADe184815f038'
abi: Dispenser
startBlock: 12398958
address: '0x5509dc151e25BdA96d508A5994654980b7574883'
abi: FactoryRouter
startBlock: 0
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/dispenser.ts
file: ./src/mappings/factoryRouter.ts
entities:
- Dispenser
- FactoryRouter
abis:
- name: Dispenser
file: ./abis/Dispenser.json
- name: FactoryRouter
file: ./abis/FactoryRouter.json
eventHandlers:
- event: Activated(indexed address)
handler: handleDispenserActivated
- event: Deactivated(indexed address)
handler: handleDispenserDeactivated
- event: AcceptedMinter(indexed address)
handler: handleDispenserAcceptedMinter
- event: RemovedMinter(indexed address)
handler: handleDispenserRemovedMinter
- event: TokensDispensed(indexed address,indexed address,uint256)
handler: handleDispenserTokensDispensed
- event: OwnerWithdrawed(indexed address,indexed address,uint256)
handler: handleDispenserOwnerWithdrawed
- event: NewPool(indexed address,bool)
handler: handleNewPool
templates:
- kind: ethereum/contract
name: Pool
network: mainnet
- name: ERC20Template
kind: ethereum/contract
network: barge
source:
abi: Pool
abi: ERC20Template
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/pool.ts
file: ./src/mappings/erc20Template.ts
entities:
- Pool
- PoolFactory
- Swap
- ERC20Template
abis:
- name: Pool
file: ./abis/BPool.json
- name: BToken
file: ./abis/BToken.json
- name: ERC20
file: ./abis/ERC20.json
- name: ERC20SymbolBytes
file: ./abis/ERC20SymbolBytes.json
- name: ERC20NameBytes
file: ./abis/ERC20NameBytes.json
- name: ERC20Template
file: ./abis/ERC20Template.json
eventHandlers:
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0x34e1990700000000000000000000000000000000000000000000000000000000'
handler: handleSetSwapFee
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0x92eefe9b00000000000000000000000000000000000000000000000000000000'
handler: handleSetController
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0x49b5955200000000000000000000000000000000000000000000000000000000'
handler: handleSetPublicSwap
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0x4bb278f300000000000000000000000000000000000000000000000000000000'
handler: handleFinalize
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0xd1d7bc9100000000000000000000000000000000000000000000000000000000'
handler: handleSetup
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0x3fdddaa200000000000000000000000000000000000000000000000000000000'
handler: handleRebind
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0xe4e1e53800000000000000000000000000000000000000000000000000000000'
handler: handleRebind
- event: LOG_CALL(indexed bytes4,indexed address,bytes)
topic0: '0x8c28cbe800000000000000000000000000000000000000000000000000000000'
handler: handleGulp
- event: LOG_JOIN(indexed address,indexed address,uint256)
handler: handleJoinPool
- event: LOG_EXIT(indexed address,indexed address,uint256)
handler: handleExitPool
- event: LOG_SWAP(indexed address,indexed address,indexed address,uint256,uint256)
handler: handleSwap
- event: Transfer(indexed address,indexed address,uint256)
handler: handleTransfer
- kind: ethereum/contract
name: DataToken
network: mainnet
source:
abi: DataToken
mapping:
kind: ethereum/events
apiVersion: 0.0.5
language: wasm/assemblyscript
file: ./src/mappings/datatoken.ts
entities:
- DataToken
- DatatokenFactory
abis:
- name: DataToken
file: ./abis/DataTokenTemplate.json
eventHandlers:
- event: Transfer(indexed address,indexed address,uint256)
handler: handleTransfer
- event: OrderStarted(indexed address,indexed address,uint256,uint256,uint256,indexed address,uint256)
- event: OrderStarted(indexed address,address,uint256,uint256,uint256,indexed address,indexed address,uint256)
handler: handleOrderStarted
- event: MinterApproved(address,address)
handler: handleMinterApproved