Skip to content

Commit

Permalink
Network Scoring Companion (dhiway#30)
Browse files Browse the repository at this point in the history
* score companion module
* dependency updates
* score demos

Signed-off-by: "Satish Mohan" <satish@dhiway.com>
  • Loading branch information
smohan-dw authored Dec 8, 2022
1 parent 7a82625 commit e805210
Show file tree
Hide file tree
Showing 21 changed files with 1,756 additions and 1,043 deletions.
236 changes: 236 additions & 0 deletions demo/src/demo-score-batch.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
import * as Cord from '@cord.network/sdk'
import moment from 'moment'
import Keyring from '@polkadot/keyring'
import { ApiPromise, WsProvider } from '@polkadot/api'
import { ScoreType } from '@cord.network/types'
import { UUID } from '@cord.network/utils'

export const sleep = (ms: number): Promise<void> => {
return new Promise((resolve) => {
setTimeout(() => resolve(), ms)
})
}
function getRandomFloat(min: number, max: number, decimals: number) {
const str = (Math.random() * (max - min) + min).toFixed(decimals)

return parseFloat(str)
}
async function main() {
await Cord.init({ address: 'ws://127.0.0.1:9944' })
const wsProvider = new WsProvider('ws://127.0.0.1:9944')
const api = await ApiPromise.create({ provider: wsProvider })

// Step 1: Setup Identities
console.log(`\n❄️ Demo Identities (KeyRing)`)

const sellerIdentity = Cord.Identity.buildFromURI('//Entity', {
signingKeyPairType: 'sr25519',
})
console.log(
`🏛 Seller Entity (${sellerIdentity.signingKeyType}): ${sellerIdentity.address}`
)
const deliveryIdentity = Cord.Identity.buildFromURI('//Delivery', {
signingKeyPairType: 'sr25519',
})
console.log(
`🏛 Delivery Entity (${deliveryIdentity.signingKeyType}): ${deliveryIdentity.address}`
)
const collectorIdentity = Cord.Identity.buildFromURI('//BuyerApp', {
signingKeyPairType: 'ed25519',
})
console.log(
`📱 Score Collector (${collectorIdentity.signingKeyType}): ${collectorIdentity.address}`
)
const requestorIdentity = Cord.Identity.buildFromURI('//SellerApp', {
signingKeyPairType: 'ed25519',
})
console.log(
`📱 Score Requestor (${requestorIdentity.signingKeyType}): ${requestorIdentity.address}`
)
const poolTransactionAuthor = Cord.Identity.buildFromURI('//Bob', {
signingKeyPairType: 'sr25519',
})
console.log(
`🏢 Pool Author (${poolTransactionAuthor.signingKeyType}): ${poolTransactionAuthor.address}`
)
let keyring = new Keyring({ type: 'sr25519' })
let batchTransactionAuthor = keyring.addFromUri('//Charlie')
console.log(
`🏢 Batch Author (${keyring.type}): ${batchTransactionAuthor.address}`
)
console.log('✅ Identities created!')

let txPoolBatch: any = []

let startTxPrep = moment()
let txPoolCount = 125

console.log(`\n❄️ Pool Submission `)
for (let j = 0; j < txPoolCount; j++) {
let tidUid = UUID.generate().toString()
let overallPoolEntryContent = {
entity: sellerIdentity.address,
uid: UUID.generate().toString(),
tid: tidUid,
collector: collectorIdentity.address,
requestor: requestorIdentity.address,
scoreType: ScoreType.overall,
score: getRandomFloat(1.5, 4.5, 2),
}

let newOverallPoolJournalEntry = Cord.Score.fromJournalProperties(
overallPoolEntryContent,
sellerIdentity
)

try {
let txOverallPoolEntry = await Cord.Score.entries(
newOverallPoolJournalEntry
)
txPoolBatch.push(txOverallPoolEntry)
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}

let deliveryPoolEntryContent = {
entity: deliveryIdentity.address,
uid: UUID.generate().toString(),
tid: tidUid,
collector: collectorIdentity.address,
requestor: requestorIdentity.address,
scoreType: ScoreType.delivery,
score: getRandomFloat(0.5, 3.5, 2),
}
let newDeliveryPoolJournalEntry = Cord.Score.fromJournalProperties(
deliveryPoolEntryContent,
deliveryIdentity
)
try {
let txDeliveryPoolEntry = await Cord.Score.entries(
newDeliveryPoolJournalEntry
)
txPoolBatch.push(txDeliveryPoolEntry)
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}
}
let ancStartTime = moment()
// console.log('\n')
for (let i = 0; i < txPoolBatch.length; i++) {
process.stdout.write(
' ✨ Creation, Transformation & Submission of ' +
(i + 1) +
' extrinsics to the pool took ' +
moment.duration(moment().diff(ancStartTime)).as('seconds').toFixed(3) +
's\r'
)

try {
await Cord.Chain.signAndSubmitTx(txPoolBatch[i], poolTransactionAuthor, {
resolveOn: Cord.Chain.IS_READY,
rejectOn: Cord.Chain.IS_ERROR,
})
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}
}

console.log(`\n❄️ Batch Anchoring `)
let txBatch: any = []
let startBatchPrep = moment()
let txBatchCount = 125
for (let j = 0; j < txBatchCount; j++) {
let tidUid = UUID.generate().toString()
let overallEntryContent = {
entity: sellerIdentity.address,
uid: UUID.generate().toString(),
tid: tidUid,
collector: collectorIdentity.address,
requestor: requestorIdentity.address,
scoreType: ScoreType.overall,
score: getRandomFloat(1.5, 4.5, 2),
}

let newOverallJournalEntry = Cord.Score.fromJournalProperties(
overallEntryContent,
sellerIdentity
)

try {
let txOverallEntry = await Cord.Score.entries(newOverallJournalEntry)
txBatch.push(txOverallEntry)
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}

let deliveryEntryContent = {
entity: deliveryIdentity.address,
uid: UUID.generate().toString(),
tid: tidUid,
collector: collectorIdentity.address,
requestor: requestorIdentity.address,
scoreType: ScoreType.delivery,
score: getRandomFloat(0.5, 3.5, 2),
}
let newDeliveryJournalEntry = Cord.Score.fromJournalProperties(
deliveryEntryContent,
deliveryIdentity
)
try {
let txDeliveryEntry = await Cord.Score.entries(newDeliveryJournalEntry)
txBatch.push(txDeliveryEntry)
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}
}
try {
api.tx.utility.batchAll(txBatch).signAndSend(batchTransactionAuthor)
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}
process.stdout.write(
' ✨ Creation, Transformation & Submission of ' +
txBatch.length +
' extrinsics to the block took ' +
moment.duration(moment().diff(startBatchPrep)).as('seconds').toFixed(3) +
's\r'
)
console.log('\n\n💤 Waiting for block finalization')

await sleep(6000)
console.log(`\n❄️ Query Chain Scores `)
const chainDeliveryScore = await Cord.Score.query(
deliveryIdentity.address,
ScoreType.delivery
)
console.dir(chainDeliveryScore, { depth: null, colors: true })

const chainDeiveryAvgScore = await Cord.Score.queryAverage(
deliveryIdentity.address,
ScoreType.delivery
)
console.dir(chainDeiveryAvgScore, { depth: null, colors: true })

const chainOverallScore = await Cord.Score.query(
sellerIdentity.address,
ScoreType.overall
)
console.dir(chainOverallScore, { depth: null, colors: true })

const chainOverallAvgScore = await Cord.Score.queryAverage(
sellerIdentity.address,
ScoreType.overall
)
console.dir(chainOverallAvgScore, { depth: null, colors: true })
await api.disconnect()
}

main()
.then(() => console.log('Bye! 👋 👋 👋 \n'))
.finally(Cord.disconnect)

process.on('SIGINT', async () => {
console.log('Bye! 👋 👋 👋 \n')
Cord.disconnect()
process.exit(0)
})
101 changes: 101 additions & 0 deletions demo/src/demo-score.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import * as Cord from '@cord.network/sdk'
import { ScoreType } from '@cord.network/types'
import { UUID } from '@cord.network/utils'

async function main() {
await Cord.init({ address: 'ws://127.0.0.1:9944' })

// Step 1: Setup Org Identity
console.log(`\n❄️ Demo Identities (KeyRing)`)
//3x4DHc1rxVAEqKWSx1DAAA8wZxLB4VhiRbMV997niBckUwSi
const sellerIdentity = Cord.Identity.buildFromURI('//Entity', {
signingKeyPairType: 'sr25519',
})
console.log(
`🏛 Seller Entity (${sellerIdentity.signingKeyType}): ${sellerIdentity.address}`
)
const deliveryIdentity = Cord.Identity.buildFromURI('//Delivery', {
signingKeyPairType: 'sr25519',
})
console.log(
`🏛 Delivery Entity (${deliveryIdentity.signingKeyType}): ${deliveryIdentity.address}`
)
const collectorIdentity = Cord.Identity.buildFromURI('//BuyerApp', {
signingKeyPairType: 'ed25519',
})
console.log(
`🧑🏻‍💼 Score Collector (${collectorIdentity.signingKeyType}): ${collectorIdentity.address}`
)
const requestorIdentity = Cord.Identity.buildFromURI('//SellerApp', {
signingKeyPairType: 'ed25519',
})
console.log(
`👩‍⚕️ Score Requestor (${requestorIdentity.signingKeyType}): ${requestorIdentity.address}`
)
const transactionAuthor = Cord.Identity.buildFromURI('//Bob', {
signingKeyPairType: 'sr25519',
})
console.log(
`🏢 Transaction Author (${transactionAuthor.signingKeyType}): ${transactionAuthor.address}`
)
console.log('✅ Identities created!')

// Step 2: Create a jounal entry
console.log(`\n❄️ Journal Entry `)
let journalContent = {
entity: sellerIdentity.address,
uid: UUID.generate().toString(),
tid: UUID.generate().toString(),
collector: collectorIdentity.address,
requestor: requestorIdentity.address,
scoreType: ScoreType.overall,
score: 3.7,
}
console.dir(journalContent, { depth: null, colors: true })

let newJournalEntry = Cord.Score.fromJournalProperties(
journalContent,
sellerIdentity
)

let journalCreationExtrinsic = await Cord.Score.entries(newJournalEntry)
console.log(`\n❄️ Transformed Journal Entry `)
console.dir(newJournalEntry, { depth: null, colors: true })

try {
await Cord.Chain.signAndSubmitTx(
journalCreationExtrinsic,
transactionAuthor,
{
resolveOn: Cord.Chain.IS_IN_BLOCK,
rejectOn: Cord.Chain.IS_ERROR,
}
)
console.log('✅ Journal Entry added!')
} catch (e: any) {
console.log(e.errorCode, '-', e.message)
}

console.log(`\n❄️ Query Chain Scores `)
const chainScore = await Cord.Score.query(
journalContent.entity,
journalContent.scoreType
)
console.dir(chainScore, { depth: null, colors: true })

const chainAvgScore = await Cord.Score.queryAverage(
journalContent.entity,
journalContent.scoreType
)
console.dir(chainAvgScore, { depth: null, colors: true })
}

main()
.then(() => console.log('\nBye! 👋 👋 👋 '))
.finally(Cord.disconnect)

process.on('SIGINT', async () => {
console.log('\nBye! 👋 👋 👋 \n')
Cord.disconnect()
process.exit(0)
})
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
"demo-messaging": "tsx --no-cache --no-warnings demo/src/demo-messaging.ts",
"demo-meta": "tsx --no-cache --no-warnings demo/src/demo-meta.ts",
"demo-rating": "tsx --no-cache --no-warnings demo/src/demo-rating.ts",
"demo-score": "tsx --no-cache --no-warnings demo/src/demo-score.ts",
"demo-score-batch": "tsx --no-cache --no-warnings demo/src/demo-score-batch.ts",
"bench": "tsx demo/src/bench.ts",
"set:version": "yarn workspaces foreach -pt exec npm version --no-git-tag-version",
"prepublish": "yarn workspaces foreach -p --no-private exec cp -f ../../LICENSE .",
Expand Down Expand Up @@ -59,8 +61,8 @@
"ts-jest": "^27.1.2",
"ts-jest-resolver": "^2.0.0",
"tsx": "^3.4.3",
"typedoc": "^0.22.7",
"typescript": "^4.5.4"
"typedoc": "^0.22.15",
"typescript": "^4.8.3"
},
"version": "0.7.7-3",
"packageManager": "yarn@3.2.1"
Expand Down
4 changes: 2 additions & 2 deletions packages/config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
"homepage": "https://github.com/dhiway/cord.js#readme",
"devDependencies": {
"rimraf": "^3.0.2",
"typescript": "^4.5.4"
"typescript": "^4.8.3"
},
"dependencies": {
"@cord.network/utils": "workspace:*",
"@polkadot/api-augment": "^8.12.0",
"@polkadot/api-augment": "^9.4.1",
"typescript-logging": "^0.6.4"
}
}
4 changes: 2 additions & 2 deletions packages/messaging/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@
"homepage": "https://github.com/dhiway/cord.js#readme",
"devDependencies": {
"rimraf": "^3.0.2",
"typescript": "^4.5.4"
"typescript": "^4.8.3"
},
"dependencies": {
"@cord.network/modules": "workspace:*",
"@cord.network/types": "workspace:*",
"@cord.network/utils": "workspace:*",
"@polkadot/api-augment": "^8.12.0",
"@polkadot/api-augment": "^9.4.1",
"@polkadot/util": "^10.0.0"
}
}
Loading

0 comments on commit e805210

Please sign in to comment.