Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/curated-paranet-demo.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const ENVIRONMENT = 'development';
const OT_NODE_HOSTNAME = 'http://localhost';
const OT_NODE_PORT = '8900';
const PUBLIC_KEY = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
const PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
const PRIVATE_KEY = '';

const DkgClient = new DKG({
environment: ENVIRONMENT,
Expand Down
26 changes: 13 additions & 13 deletions examples/demo.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ import jsonld from 'jsonld';
import DKG from '../index.js';
import { sleepForMilliseconds } from '../services/utilities.js';

const ENVIRONMENT = 'development';
const OT_NODE_HOSTNAME = 'http://localhost';
const ENVIRONMENT = 'testnet';
const OT_NODE_HOSTNAME = 'https://v6-pegasus-node-06.origin-trail.network';
const OT_NODE_PORT = '8900';
const PUBLIC_KEY = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
const PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
const PUBLIC_KEY = '';
const PRIVATE_KEY = '';

const DkgClient = new DKG({
environment: ENVIRONMENT,
endpoint: OT_NODE_HOSTNAME,
port: OT_NODE_PORT,
blockchain: {
name: 'hardhat1',
name: 'otp:20430',
publicKey: PUBLIC_KEY,
privateKey: PRIVATE_KEY,
},
Expand Down Expand Up @@ -117,15 +117,15 @@ function divider() {

// divider();

// console.time('Publish (5 replications, 5 finalizations)');
// const result3 = await DkgClient.asset.create(content, {
// epochsNum: 2,
// minimumNumberOfFinalizationConfirmations: 3,
// minimumNumberOfNodeReplications: 3,
// });
// console.timeEnd('Publish (5 replications, 5 finalizations)');
console.time('Publish (5 replications, 5 finalizations)');
const result3 = await DkgClient.asset.create(content, {
epochsNum: 2,
minimumNumberOfFinalizationConfirmations: 3,
minimumNumberOfNodeReplications: 3,
});//payer in options
console.timeEnd('Publish (5 replications, 5 finalizations)');

// console.log(JSON.stringify(result3, null, 2));
console.log(JSON.stringify(result3, null, 2));

// divider();

Expand Down
115 changes: 115 additions & 0 deletions examples/paymaster-demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import jsonld from 'jsonld';
import DKG from '../index.js';
import { sleepForMilliseconds } from '../services/utilities.js';

const ENVIRONMENT = 'testnet';
const OT_NODE_HOSTNAME = 'https://v6-pegasus-node-02.origin-trail.network';
const OT_NODE_PORT = '8900';
const PUBLIC_KEY = '0x1dD2C730a2BcD26d6aEf7DCCF171FC2AB1384d14';
const PRIVATE_KEY = '8ae4f7c247ad422913c1c60187856091ad2bcb4e53fb2936d7633d7d02bd180a';

const DkgClient = new DKG({
environment: ENVIRONMENT,
endpoint: OT_NODE_HOSTNAME,
port: OT_NODE_PORT,
blockchain: {
name: 'otp:20430',
publicKey: PUBLIC_KEY,
privateKey: PRIVATE_KEY,
},
maxNumberOfRetries: 300,
frequency: 2,
contentType: 'all',
nodeApiVersion: '/v1',
});

function divider() {
console.log('==================================================');
console.log('==================================================');
console.log('==================================================');
}


(async () => {

const content = {
private: {
'@context': 'https://www.schema.org',
'@id': 'urn:eu-pp:safety-test:3oRIwPtUOJapwNSAGZTzCOWR9bEo',
'@type': 'ProductSafetyTest',
testType: 'Functional Safety Test',
testResults: 'Fail',
relatedProduct: [
{
'@id': 'urn:epc:id:sgtin:59G1yu8uivSRKLLu',
name: '59G1yu8uivSRKLLu',
},
],
},
};

// const nodeInfo = await DkgClient.node.info();
// console.log('======================== NODE INFO RECEIVED');
// console.log(nodeInfo);

divider();

//Publish paymaster

// const paymasterAddress = await DkgClient.paymaster.deployPaymasterContract({
// epochsNum: 2,
// minimumNumberOfFinalizationConfirmations: 3,
// minimumNumberOfNodeReplications: 3,
// });

// console.log('Deployed Address:', paymasterAddress);

await DkgClient.paymaster.addAllowedAddress(
'0x1d23852331eDA24d1b6F5E21fdc419A38B0de28c', //Paymaster address
'0x1dD2C730a2BcD26d6aEf7DCCF171FC2AB1384d14' // address to be added
);

console.log('Added allowed address.');


await DkgClient.paymaster.removeAllowedAddress(
'0x1d23852331eDA24d1b6F5E21fdc419A38B0de28c', //Paymaster address
'0x1dD2C730a2BcD26d6aEf7DCCF171FC2AB1384d14' // address to be removed
);

console.log('Removed allowed address.');

await DkgClient.paymaster.fundPaymaster(
'0x1d23852331eDA24d1b6F5E21fdc419A38B0de28c',
BigInt(1000000)
);
console.log('Funded Paymaster.');

await DkgClient.paymaster.withdraw(
'0x1d23852331eDA24d1b6F5E21fdc419A38B0de28c', //Paymaster address
'0x1dD2C730a2BcD26d6aEf7DCCF171FC2AB1384d14', // address of recipient
BigInt(500000)
);
console.log('Withdrawal complete.');


// console.time('Publish (5 replications, 5 finalizations)');
// const result3 = await DkgClient.asset.create(content, {
// epochsNum: 2,
// minimumNumberOfFinalizationConfirmations: 3,
// minimumNumberOfNodeReplications: 3,
// });//payer in options

// console.timeEnd('Publish (5 replications, 5 finalizations)');

// console.log(JSON.stringify(result3, null, 2));

// console.time('get');
// const getOperationResult = await DkgClient.graph.get(
// 'did:dkg:base:84532/0xd5550173b0f7b8766ab2770e4ba86caf714a5af5/2',
// );
// console.log('======================== ASSET GET');
// console.log(getOperationResult);
// console.timeEnd('get');

})();
86 changes: 80 additions & 6 deletions index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -3124,6 +3124,8 @@ const KnowledgeCollectionAbi = require$1('dkg-evm-module/abi/KnowledgeCollection
const KnowledgeCollectionStorageAbi = require$1('dkg-evm-module/abi/KnowledgeCollectionStorage.json');
const AskStorageAbi = require$1('dkg-evm-module/abi/AskStorage.json');
const ChronosAbi = require$1('dkg-evm-module/abi/Chronos.json');
const PaymasterAbi = require$1('dkg-evm-module/abi/Paymaster.json');
const PaymasterManagerAbi = require$1('dkg-evm-module/abi/PaymasterManager.json');

class BlockchainServiceBase {
constructor(config = {}) {
Expand All @@ -3148,6 +3150,8 @@ class BlockchainServiceBase {
this.abis.KnowledgeCollectionStorage = KnowledgeCollectionStorageAbi;
this.abis.AskStorage = AskStorageAbi;
this.abis.Chronos = ChronosAbi;
this.abis.Paymaster = PaymasterAbi;
this.abis.PaymasterManager = PaymasterManagerAbi;

this.abis.KnowledgeCollectionStorage.filter((obj) => obj.type === 'event').forEach(
(event) => {
Expand Down Expand Up @@ -3242,8 +3246,8 @@ class BlockchainServiceBase {
blockchain.name.startsWith('otp')
? DEFAULT_GAS_PRICE.OTP
: blockchain.name.startsWith('base')
? DEFAULT_GAS_PRICE.BASE
: DEFAULT_GAS_PRICE.GNOSIS,
? DEFAULT_GAS_PRICE.BASE
: DEFAULT_GAS_PRICE.GNOSIS,
'Gwei',
);
}
Expand Down Expand Up @@ -3502,9 +3506,10 @@ class BlockchainServiceBase {
paranetKaContract,
paranetTokenId,
blockchain,
paymaster = null,
stepHooks = emptyHooks,
) {
const sender = await this.getPublicKey(blockchain);
const sender = paymaster || await this.getPublicKey(blockchain);

try {
let allowanceIncreased, allowanceGap;
Expand Down Expand Up @@ -4231,8 +4236,8 @@ class BlockchainServiceBase {
blockchain.name.startsWith('otp')
? DEFAULT_GAS_PRICE.OTP
: blockchain.name.startsWith('base')
? DEFAULT_GAS_PRICE.BASE
: DEFAULT_GAS_PRICE.GNOSIS,
? DEFAULT_GAS_PRICE.BASE
: DEFAULT_GAS_PRICE.GNOSIS,
'Gwei',
);
}
Expand Down Expand Up @@ -4291,6 +4296,55 @@ class BlockchainServiceBase {
convertToWei(ether) {
return Web3.utils.toWei(ether.toString(), 'ether');
}

//Paymaster functions
async deployPaymasterContract(blockchain) {
const paymasterAddressContract = await this.callContractFunction(
'PaymasterManager',
'constructor',
[],
blockchain,
);

let { paymasterAddress } = await this.decodeEventLogs(paymasterAddressContract, 'deployPaymaster', blockchain);

return paymasterAddress;
}

async addAllowedAddress(blockchain, public_adress) {
return this.callContractFunction(
'Paymaster',
'addAllowedAddress',
[public_adress],
blockchain,
);
}

async removeAllowedAddress(blockchain, public_adress) {
return this.callContractFunction(
'Paymaster',
'removeAllowedAddress',
[public_adress],
blockchain,
);
}

async fundPaymaster(blockchain, tokenAmount) {
return this.callContractFunction('Paymaster', 'fundPaymaster', [tokenAmount], blockchain);
}

async withdrawPaymaster(blockchain, recipient, tokenAmount) {
return this.callContractFunction(
'Paymaster',
'withdraw',
[recipient, tokenAmount],
blockchain,
);
}

async coverCostPaymaster(blockchain, tokenAmount) {
return this.callContractFunction('Paymaster', 'coverCost', [tokenAmount], blockchain);
}
}

/* eslint-disable no-await-in-loop */
Expand Down Expand Up @@ -4433,7 +4487,7 @@ class NodeBlockchainService extends BlockchainServiceBase {
this.abis.KnowledgeCollectionStorage.filter((obj) => obj.type === 'event').forEach(
(event) => {
const concatInputs = event.inputs.map((input) => input.internalType);

this.events[event.name] = {
hash: Web3.utils.keccak256(`${event.name}(${concatInputs})`),
inputs: event.inputs,
Expand Down Expand Up @@ -5326,6 +5380,26 @@ class ValidationService {
minimumNumberOfFinalizationConfirmations,
);
}

//Paymaster validator

validatePaymasterAddress(blockchain, hubAddress) {
this.validateBlockchain(blockchain);
this.validateAddress(hubAddress);
}

validatePaymasterToken(blockchain, tokenAmount) {
this.validateBlockchain(blockchain);
this.validateTokenAmount(tokenAmount);
}

validatePaymasterTokenAdress(blockchain, tokenAmount, recipient) {
this.validateBlockchain(blockchain);
this.validateTokenAmount(tokenAmount);
this.validateAddress(recipient);
}


}

class InputService {
Expand Down
2 changes: 2 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import GraphOperationsManager from './managers/graph-operations-manager.js';
import NetworkOperationsManager from './managers/network-operations-manager.js';
import NodeOperationsManager from './managers/node-operations-manager.js';
import ParanetOperationsManager from './managers/paranet-operations-manager.js';
import PaymasterOperationsManager from './managers/paymaster-operations-manager.js';

import BaseServiceManager from './services/base-service-manager.js';

Expand All @@ -21,6 +22,7 @@ export default class DkgClient {
this.graph = new GraphOperationsManager(services);
this.network = new NetworkOperationsManager(services);
this.paranet = new ParanetOperationsManager(services);
this.paymaster = new PaymasterOperationsManager(services);

// Backwards compatibility
this.graph.get = this.asset.get.bind(this.asset);
Expand Down
Loading