From 4f1e2aee8654f032336a6feed1480b2c6d43ee6f Mon Sep 17 00:00:00 2001 From: pavlzk Date: Thu, 12 May 2022 21:07:08 +0300 Subject: [PATCH] feat(users): migrate to last version of users program --- config.ts | 2 +- libraries/Solana/UsersProgram/UsersProgram.ts | 60 ++++++ .../Solana/UsersProgram/UsersProgram.types.ts | 200 ++++++++++++++++++ 3 files changed, 261 insertions(+), 1 deletion(-) diff --git a/config.ts b/config.ts index c0b675e83b..56b64608f0 100644 --- a/config.ts +++ b/config.ts @@ -62,7 +62,7 @@ export const Config = { groupchatsProgramId: 'bJhvwTYCkQceANgeShZ4xaxUqEBPsV8e1NgRnLRymxs', defaultCommitment: 'confirmed' as Commitment, defaultPreflightCommitment: 'confirmed' as Commitment, - usersProgramId: '7MaC2xrAmmFsuRBEkD6BEL3eJpXCmaikYhLM3eKBPhAH', + usersProgramId: '8n2ct4HBadJdtr8T31JvYPTvmYeZyCuLUjkt3CwcSsh9', }, // Realms are just different chains we support realms: [ diff --git a/libraries/Solana/UsersProgram/UsersProgram.ts b/libraries/Solana/UsersProgram/UsersProgram.ts index b65c8c6bd9..f2c4de569e 100644 --- a/libraries/Solana/UsersProgram/UsersProgram.ts +++ b/libraries/Solana/UsersProgram/UsersProgram.ts @@ -162,6 +162,9 @@ export default class UsersProgram extends EventEmitter { name: userInfo.name as string, photoHash: userInfo.photoHash as string, status: userInfo.status as string, + bannerImageHash: userInfo.bannerImageHash as string, + extra1: userInfo.extra1 as string, + extra2: userInfo.extra2 as string, } } @@ -247,6 +250,63 @@ export default class UsersProgram extends EventEmitter { signers: [payer], }) } + + /** + * @method setBannerImageHash + * Allow the user to update the profile banner image + * @param bannerImageHash profile banner image IPFS hash + * @returns the transaction signature + */ + async setBannerImageHash(bannerImageHash: string): Promise { + const { program, userPDA, payer } = await this._getUpdateOpts() + + return program.rpc.setBannerImageHash(bannerImageHash, { + accounts: { + user: userPDA[0], + signer: payer.publicKey, + payer: payer.publicKey, + }, + signers: [payer], + }) + } + + /** + * @method setExtraOne + * Allow the user to update the first extra field of profile + * @param value extra field value + * @returns the transaction signature + */ + async setExtraOne(value: string): Promise { + const { program, userPDA, payer } = await this._getUpdateOpts() + + return program.rpc.setExtraOne(value, { + accounts: { + user: userPDA[0], + signer: payer.publicKey, + payer: payer.publicKey, + }, + signers: [payer], + }) + } + + /** + * @method setExtraTwo + * Allow the user to update the second extra field of profile + * @param value extra field value + * @returns the transaction signature + */ + async setExtraTwo(value: string): Promise { + const { program, userPDA, payer } = await this._getUpdateOpts() + + return program.rpc.setExtraTwo(value, { + accounts: { + user: userPDA[0], + signer: payer.publicKey, + payer: payer.publicKey, + }, + signers: [payer], + }) + } } export type UserInfo = Awaited> diff --git a/libraries/Solana/UsersProgram/UsersProgram.types.ts b/libraries/Solana/UsersProgram/UsersProgram.types.ts index cf4758337f..97a18c4aa0 100644 --- a/libraries/Solana/UsersProgram/UsersProgram.types.ts +++ b/libraries/Solana/UsersProgram/UsersProgram.types.ts @@ -119,6 +119,84 @@ export type Users = { }, ] }, + { + name: 'setBannerImageHash' + accounts: [ + { + name: 'user' + isMut: true + isSigner: false + }, + { + name: 'signer' + isMut: false + isSigner: true + }, + { + name: 'payer' + isMut: true + isSigner: true + }, + ] + args: [ + { + name: 'bannerImageHash' + type: 'string' + }, + ] + }, + { + name: 'setExtraOne' + accounts: [ + { + name: 'user' + isMut: true + isSigner: false + }, + { + name: 'signer' + isMut: false + isSigner: true + }, + { + name: 'payer' + isMut: true + isSigner: true + }, + ] + args: [ + { + name: 'extra1' + type: 'string' + }, + ] + }, + { + name: 'setExtraTwo' + accounts: [ + { + name: 'user' + isMut: true + isSigner: false + }, + { + name: 'signer' + isMut: false + isSigner: true + }, + { + name: 'payer' + isMut: true + isSigner: true + }, + ] + args: [ + { + name: 'extra2' + type: 'string' + }, + ] + }, ] accounts: [ { @@ -138,6 +216,18 @@ export type Users = { name: 'status' type: 'string' }, + { + name: 'bannerImageHash' + type: 'string' + }, + { + name: 'extra1' + type: 'string' + }, + { + name: 'extra2' + type: 'string' + }, ] } }, @@ -153,6 +243,16 @@ export type Users = { name: 'PayerMismatch' msg: 'Account was not created by provided user' }, + { + code: 6002 + name: 'IncorrectField' + msg: 'The field is too short or too long' + }, + { + code: 6003 + name: 'InputError' + msg: 'Parameters order mismatch' + }, ] } @@ -277,6 +377,84 @@ export const IDL: Users = { }, ], }, + { + name: 'setBannerImageHash', + accounts: [ + { + name: 'user', + isMut: true, + isSigner: false, + }, + { + name: 'signer', + isMut: false, + isSigner: true, + }, + { + name: 'payer', + isMut: true, + isSigner: true, + }, + ], + args: [ + { + name: 'bannerImageHash', + type: 'string', + }, + ], + }, + { + name: 'setExtraOne', + accounts: [ + { + name: 'user', + isMut: true, + isSigner: false, + }, + { + name: 'signer', + isMut: false, + isSigner: true, + }, + { + name: 'payer', + isMut: true, + isSigner: true, + }, + ], + args: [ + { + name: 'extra1', + type: 'string', + }, + ], + }, + { + name: 'setExtraTwo', + accounts: [ + { + name: 'user', + isMut: true, + isSigner: false, + }, + { + name: 'signer', + isMut: false, + isSigner: true, + }, + { + name: 'payer', + isMut: true, + isSigner: true, + }, + ], + args: [ + { + name: 'extra2', + type: 'string', + }, + ], + }, ], accounts: [ { @@ -296,6 +474,18 @@ export const IDL: Users = { name: 'status', type: 'string', }, + { + name: 'bannerImageHash', + type: 'string', + }, + { + name: 'extra1', + type: 'string', + }, + { + name: 'extra2', + type: 'string', + }, ], }, }, @@ -311,5 +501,15 @@ export const IDL: Users = { name: 'PayerMismatch', msg: 'Account was not created by provided user', }, + { + code: 6002, + name: 'IncorrectField', + msg: 'The field is too short or too long', + }, + { + code: 6003, + name: 'InputError', + msg: 'Parameters order mismatch', + }, ], }