Compare commits

..

2 Commits
main ... main

Author SHA1 Message Date
04d176eb55 Make txs in parallel in auction tests to reduce run time (#30)
All checks were successful
Tests / sdk_tests (push) Successful in 31m36s
Part of [Service provider auctions](https://www.notion.so/Service-provider-auctions-a7b63697d818479493ec145ea6ea3c1c)

Reviewed-on: cerc-io/registry-sdk#30
Co-authored-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
Co-committed-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
2024-10-30 05:45:17 +00:00
9152d09c66 Add helper methods to parse gas, fees and gasPrice (#29)
All checks were successful
Publish npm package to gitea / npm_publish (18.x) (release) Successful in 1m42s
Tests / sdk_tests (push) Successful in 32m10s
Part of [Service provider auctions for web deployments](https://www.notion.so/Service-provider-auctions-for-web-deployments-104a6b22d47280dbad51d28aa3a91d75)

Co-authored-by: IshaVenikar <ishavenikar7@gmail.com>
Reviewed-on: cerc-io/registry-sdk#29
Co-authored-by: Prathamesh Musale <prathamesh@noreply.git.vdb.to>
Co-committed-by: Prathamesh Musale <prathamesh@noreply.git.vdb.to>
2024-10-07 10:55:47 +00:00
4 changed files with 54 additions and 18 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@cerc-io/registry-sdk",
"version": "0.2.10",
"version": "0.2.11",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"repository": "git@github.com:cerc-io/registry-sdk.git",

View File

@ -67,10 +67,13 @@ const auctionTests = () => {
test('Commit bids.', async () => {
for (let i = 0; i < numBidders; i++) {
bidAmounts.push((LOWEST_BID_AMOUNT + (i * 500)).toString());
bidderAccounts[i].bid = await createBid(chainId, auctionId, bidderAccounts[i].address, `${bidAmounts[i]}${DENOM}`);
await registry.commitBid({ auctionId, commitHash: bidderAccounts[i].bid.commitHash }, bidderAccounts[i].privateKey, fee);
}
await Promise.all(bidderAccounts.map(async (bidderAccount, i) => {
bidderAccounts[i].bid = await createBid(chainId, auctionId, bidderAccount.address, `${bidAmounts[i]}${DENOM}`);
return registry.commitBid({ auctionId, commitHash: bidderAccount.bid.commitHash }, bidderAccount.privateKey, fee);
}));
const [auction] = await registry.getAuctionsByIds([auctionId]);
expect(auction.status).toEqual('commit');
expect(auction.bids.length).toEqual(3);
@ -90,9 +93,9 @@ const auctionTests = () => {
const [auction] = await registry.getAuctionsByIds([auctionId]);
expect(auction.status).toEqual('reveal');
for (let i = 0; i < numBidders; i++) {
await registry.revealBid({ auctionId, reveal: bidderAccounts[i].bid.revealString }, bidderAccounts[i].privateKey, fee);
}
await Promise.all(bidderAccounts.map(async bidderAccount => {
return registry.revealBid({ auctionId, reveal: bidderAccount.bid.revealString }, bidderAccount.privateKey, fee);
}));
});
test('Check bids are revealed', async () => {
@ -175,7 +178,7 @@ const providerAuctionTestsWithBids = (bidAmounts: number[], numProviders: number
const otherAcc = await Account.generateFromMnemonic(mnenonic3);
await otherAcc.init();
await registry.sendCoins({ denom: DENOM, amount: CREATOR_INITIAL_BALANCE.toString(), destinationAddress: otherAcc.address }, privateKey, fee);
await registry.sendCoins({ denom: DENOM, amount: BIDDER_INITIAL_BALANCE.toString(), destinationAddress: otherAcc.address }, privateKey, fee);
otherAccount = { address: otherAcc.address, privateKey: otherAcc.privateKey.toString('hex') };
});
@ -205,10 +208,10 @@ const providerAuctionTestsWithBids = (bidAmounts: number[], numProviders: number
});
test('Commit bids.', async () => {
for (let i = 0; i < numBidders; i++) {
bidderAccounts[i].bid = await createBid(chainId, auctionId, bidderAccounts[i].address, `${bidAmounts[i]}${DENOM}`);
await registry.commitBid({ auctionId, commitHash: bidderAccounts[i].bid.commitHash }, bidderAccounts[i].privateKey, fee);
}
await Promise.all(bidderAccounts.map(async (bidderAccount, i) => {
bidderAccounts[i].bid = await createBid(chainId, auctionId, bidderAccount.address, `${bidAmounts[i]}${DENOM}`);
return registry.commitBid({ auctionId, commitHash: bidderAccount.bid.commitHash }, bidderAccount.privateKey, fee);
}));
sortedBidders = bidderAccounts.slice().sort((a, b) => {
return parseInt(a.bid.reveal.bidAmount) - parseInt(b.bid.reveal.bidAmount);
@ -239,21 +242,21 @@ const providerAuctionTestsWithBids = (bidAmounts: number[], numProviders: number
const [auction] = await registry.getAuctionsByIds([auctionId]);
expect(auction.status).toEqual('reveal');
for (let i = 0; i < numBidders; i++) {
await Promise.all(bidderAccounts.map(async bidderAccount => {
try {
await registry.revealBid(
{ auctionId, reveal: bidderAccounts[i].bid.revealString },
bidderAccounts[i].privateKey,
{ auctionId, reveal: bidderAccount.bid.revealString },
bidderAccount.privateKey,
fee
);
} catch (error: any) {
if (invalidBidderAddress === bidderAccounts[i].address) {
if (bidderAccount.address === invalidBidderAddress) {
expect(error.toString()).toContain(INVALID_BID_ERROR);
} else {
throw error;
}
}
}
}));
});
test('Check bids are revealed', async () => {

View File

@ -588,3 +588,4 @@ export { LaconicClient };
export * from './constants';
export * from './types/cerc/bond/message';
export * from './types/cerc/onboarding/message';
export { getGasPrice, parseGasAndFees } from './util';

View File

@ -1,6 +1,8 @@
import * as Block from 'multiformats/block';
import { sha256 as hasher } from 'multiformats/hashes/sha2';
import assert from 'assert';
import { GasPrice, StdFee, parseCoins } from '@cosmjs/stargate';
import * as dagCBOR from '@ipld/dag-cbor';
import * as dagJSON from '@ipld/dag-json';
@ -22,7 +24,7 @@ export class Util {
let keys = Object.keys(obj);
keys = keys.sort();
const newObject: {[key: string]: any} = {};
const newObject: { [key: string]: any } = {};
for (let i = 0; i < keys.length; i++) {
newObject[keys[i]] = Util.sortJSON(obj[keys[i]]);
@ -77,7 +79,7 @@ export class Util {
* Unmarshal attributes array to object.
*/
static fromGQLAttributes (attributes: any[] = []) {
const res: {[key: string]: any} = {};
const res: { [key: string]: any } = {};
attributes.forEach(attr => {
res[attr.key] = (attr.value === null) ? null : this.fromGQLValue(attr.value);
@ -119,3 +121,33 @@ export class Util {
return block.cid.toString();
}
}
/**
* Get gas in proper format
*/
export const parseGasAndFees = (gas?: string, fees?: string): StdFee | undefined | number => {
// If fees is not given or a number, treat it as a gas estimation multiplier
if (fees === null || fees === undefined) {
return undefined;
}
const isFeesANumber = !isNaN(Number(fees));
if (isFeesANumber) {
return Number(fees);
}
// If fees is not a gas estimation multiplier, gas is required
assert(gas, 'Invalid gas.');
return {
amount: parseCoins(String(fees)),
gas: String(gas)
};
};
/**
* Get gas price in proper format
*/
export const getGasPrice = (gasPrice: string | null): GasPrice | undefined => {
return gasPrice != null ? GasPrice.fromString(String(gasPrice)) : undefined;
};