@block52/poker-vm-sdk 1.1.10 → 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IClient.d.ts +1 -0
- package/dist/IClient.d.ts.map +1 -1
- package/dist/index.d.ts +37 -0
- package/dist/index.esm.js +237 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +237 -0
- package/dist/index.js.map +1 -1
- package/dist/pokerchain.poker.v1/registry.d.ts.map +1 -1
- package/dist/pokerchain.poker.v1/types/pokerchain/poker/v1/tx.d.ts +29 -0
- package/dist/pokerchain.poker.v1/types/pokerchain/poker/v1/tx.d.ts.map +1 -1
- package/dist/signingClient.d.ts +36 -0
- package/dist/signingClient.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4169,6 +4169,119 @@ const MsgDeleteGame = {
|
|
|
4169
4169
|
return message;
|
|
4170
4170
|
},
|
|
4171
4171
|
};
|
|
4172
|
+
function createBaseMsgRegisterNftAvatar() {
|
|
4173
|
+
return { creator: "", ethAddress: "", contractAddress: "", tokenId: "", ethSignature: "" };
|
|
4174
|
+
}
|
|
4175
|
+
const MsgRegisterNftAvatar = {
|
|
4176
|
+
encode(message, writer = new BinaryWriter()) {
|
|
4177
|
+
if (message.creator !== "") {
|
|
4178
|
+
writer.uint32(10).string(message.creator);
|
|
4179
|
+
}
|
|
4180
|
+
if (message.ethAddress !== "") {
|
|
4181
|
+
writer.uint32(18).string(message.ethAddress);
|
|
4182
|
+
}
|
|
4183
|
+
if (message.contractAddress !== "") {
|
|
4184
|
+
writer.uint32(26).string(message.contractAddress);
|
|
4185
|
+
}
|
|
4186
|
+
if (message.tokenId !== "") {
|
|
4187
|
+
writer.uint32(34).string(message.tokenId);
|
|
4188
|
+
}
|
|
4189
|
+
if (message.ethSignature !== "") {
|
|
4190
|
+
writer.uint32(42).string(message.ethSignature);
|
|
4191
|
+
}
|
|
4192
|
+
return writer;
|
|
4193
|
+
},
|
|
4194
|
+
decode(input, length) {
|
|
4195
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
4196
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
4197
|
+
const message = createBaseMsgRegisterNftAvatar();
|
|
4198
|
+
while (reader.pos < end) {
|
|
4199
|
+
const tag = reader.uint32();
|
|
4200
|
+
switch (tag >>> 3) {
|
|
4201
|
+
case 1: {
|
|
4202
|
+
if (tag !== 10) {
|
|
4203
|
+
break;
|
|
4204
|
+
}
|
|
4205
|
+
message.creator = reader.string();
|
|
4206
|
+
continue;
|
|
4207
|
+
}
|
|
4208
|
+
case 2: {
|
|
4209
|
+
if (tag !== 18) {
|
|
4210
|
+
break;
|
|
4211
|
+
}
|
|
4212
|
+
message.ethAddress = reader.string();
|
|
4213
|
+
continue;
|
|
4214
|
+
}
|
|
4215
|
+
case 3: {
|
|
4216
|
+
if (tag !== 26) {
|
|
4217
|
+
break;
|
|
4218
|
+
}
|
|
4219
|
+
message.contractAddress = reader.string();
|
|
4220
|
+
continue;
|
|
4221
|
+
}
|
|
4222
|
+
case 4: {
|
|
4223
|
+
if (tag !== 34) {
|
|
4224
|
+
break;
|
|
4225
|
+
}
|
|
4226
|
+
message.tokenId = reader.string();
|
|
4227
|
+
continue;
|
|
4228
|
+
}
|
|
4229
|
+
case 5: {
|
|
4230
|
+
if (tag !== 42) {
|
|
4231
|
+
break;
|
|
4232
|
+
}
|
|
4233
|
+
message.ethSignature = reader.string();
|
|
4234
|
+
continue;
|
|
4235
|
+
}
|
|
4236
|
+
}
|
|
4237
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
4238
|
+
break;
|
|
4239
|
+
}
|
|
4240
|
+
reader.skip(tag & 7);
|
|
4241
|
+
}
|
|
4242
|
+
return message;
|
|
4243
|
+
},
|
|
4244
|
+
fromJSON(object) {
|
|
4245
|
+
return {
|
|
4246
|
+
creator: isSet$2b(object.creator) ? globalThis.String(object.creator) : "",
|
|
4247
|
+
ethAddress: isSet$2b(object.ethAddress) ? globalThis.String(object.ethAddress) : "",
|
|
4248
|
+
contractAddress: isSet$2b(object.contractAddress) ? globalThis.String(object.contractAddress) : "",
|
|
4249
|
+
tokenId: isSet$2b(object.tokenId) ? globalThis.String(object.tokenId) : "",
|
|
4250
|
+
ethSignature: isSet$2b(object.ethSignature) ? globalThis.String(object.ethSignature) : "",
|
|
4251
|
+
};
|
|
4252
|
+
},
|
|
4253
|
+
toJSON(message) {
|
|
4254
|
+
const obj = {};
|
|
4255
|
+
if (message.creator !== "") {
|
|
4256
|
+
obj.creator = message.creator;
|
|
4257
|
+
}
|
|
4258
|
+
if (message.ethAddress !== "") {
|
|
4259
|
+
obj.ethAddress = message.ethAddress;
|
|
4260
|
+
}
|
|
4261
|
+
if (message.contractAddress !== "") {
|
|
4262
|
+
obj.contractAddress = message.contractAddress;
|
|
4263
|
+
}
|
|
4264
|
+
if (message.tokenId !== "") {
|
|
4265
|
+
obj.tokenId = message.tokenId;
|
|
4266
|
+
}
|
|
4267
|
+
if (message.ethSignature !== "") {
|
|
4268
|
+
obj.ethSignature = message.ethSignature;
|
|
4269
|
+
}
|
|
4270
|
+
return obj;
|
|
4271
|
+
},
|
|
4272
|
+
create(base) {
|
|
4273
|
+
return MsgRegisterNftAvatar.fromPartial(base ?? {});
|
|
4274
|
+
},
|
|
4275
|
+
fromPartial(object) {
|
|
4276
|
+
const message = createBaseMsgRegisterNftAvatar();
|
|
4277
|
+
message.creator = object.creator ?? "";
|
|
4278
|
+
message.ethAddress = object.ethAddress ?? "";
|
|
4279
|
+
message.contractAddress = object.contractAddress ?? "";
|
|
4280
|
+
message.tokenId = object.tokenId ?? "";
|
|
4281
|
+
message.ethSignature = object.ethSignature ?? "";
|
|
4282
|
+
return message;
|
|
4283
|
+
},
|
|
4284
|
+
};
|
|
4172
4285
|
function isSet$2b(value) {
|
|
4173
4286
|
return value !== null && value !== undefined;
|
|
4174
4287
|
}
|
|
@@ -4189,6 +4302,7 @@ const msgTypes$u = [
|
|
|
4189
4302
|
["/pokerchain.poker.v1.MsgUpdateEthBlockHeight", MsgUpdateEthBlockHeight],
|
|
4190
4303
|
["/pokerchain.poker.v1.MsgTopUp", MsgTopUp],
|
|
4191
4304
|
["/pokerchain.poker.v1.MsgDeleteGame", MsgDeleteGame],
|
|
4305
|
+
["/pokerchain.poker.v1.MsgRegisterNftAvatar", MsgRegisterNftAvatar],
|
|
4192
4306
|
];
|
|
4193
4307
|
|
|
4194
4308
|
/**
|
|
@@ -57964,6 +58078,42 @@ class SigningCosmosClient extends CosmosClient {
|
|
|
57964
58078
|
throw error;
|
|
57965
58079
|
}
|
|
57966
58080
|
}
|
|
58081
|
+
/**
|
|
58082
|
+
* Sign a pending withdrawal request (validator/relayer operation)
|
|
58083
|
+
* Generates an ECDSA signature compatible with the Base chain CosmosBridge contract
|
|
58084
|
+
*/
|
|
58085
|
+
async signWithdrawal(nonce, validatorEthKeyHex) {
|
|
58086
|
+
await this.initializeSigningClient();
|
|
58087
|
+
if (!this.signingClient || !this.wallet) {
|
|
58088
|
+
throw new Error("Signing client not initialized");
|
|
58089
|
+
}
|
|
58090
|
+
const [account] = await this.wallet.getAccounts();
|
|
58091
|
+
const signer = account.address;
|
|
58092
|
+
const msgSignWithdrawal = {
|
|
58093
|
+
signer,
|
|
58094
|
+
nonce,
|
|
58095
|
+
validatorEthKeyHex
|
|
58096
|
+
};
|
|
58097
|
+
const msg = {
|
|
58098
|
+
typeUrl: "/pokerchain.poker.v1.MsgSignWithdrawal",
|
|
58099
|
+
value: msgSignWithdrawal
|
|
58100
|
+
};
|
|
58101
|
+
const fee = gaslessFee();
|
|
58102
|
+
const memo = "Sign pending withdrawal request";
|
|
58103
|
+
console.log("🔏 Signing withdrawal:", {
|
|
58104
|
+
signer,
|
|
58105
|
+
nonce
|
|
58106
|
+
});
|
|
58107
|
+
try {
|
|
58108
|
+
const result = await this.signingClient.signAndBroadcast(signer, [msg], fee, memo);
|
|
58109
|
+
console.log("✅ Withdrawal signing successful:", result.transactionHash);
|
|
58110
|
+
return result.transactionHash;
|
|
58111
|
+
}
|
|
58112
|
+
catch (error) {
|
|
58113
|
+
console.error("❌ Withdrawal signing failed:", error);
|
|
58114
|
+
throw error;
|
|
58115
|
+
}
|
|
58116
|
+
}
|
|
57967
58117
|
/**
|
|
57968
58118
|
* Query a specific withdrawal request by nonce
|
|
57969
58119
|
*/
|
|
@@ -58114,6 +58264,93 @@ class SigningCosmosClient extends CosmosClient {
|
|
|
58114
58264
|
getWallet() {
|
|
58115
58265
|
return this.wallet;
|
|
58116
58266
|
}
|
|
58267
|
+
/**
|
|
58268
|
+
* Register an NFT as the player's avatar
|
|
58269
|
+
*
|
|
58270
|
+
* This broadcasts a MsgRegisterNftAvatar transaction containing:
|
|
58271
|
+
* - The ETH address that owns the NFT
|
|
58272
|
+
* - The NFT contract address and token ID
|
|
58273
|
+
* - An ETH signature proving the ETH address owner authorizes this cosmos address
|
|
58274
|
+
* to use the NFT as their avatar
|
|
58275
|
+
*
|
|
58276
|
+
* The validator verifies the ETH signature via ecrecover and, if valid,
|
|
58277
|
+
* stores the mapping on-chain: cosmosAddress → (contractAddress, tokenId)
|
|
58278
|
+
*
|
|
58279
|
+
* @param ethAddress - The ETH address that owns the NFT
|
|
58280
|
+
* @param contractAddress - The NFT contract address on Ethereum/Base
|
|
58281
|
+
* @param tokenId - The NFT token ID
|
|
58282
|
+
* @param ethSignature - EIP-191 signature proving ETH address ownership
|
|
58283
|
+
* @returns Transaction hash
|
|
58284
|
+
*/
|
|
58285
|
+
async registerNftAvatar(ethAddress, contractAddress, tokenId, ethSignature) {
|
|
58286
|
+
await this.initializeSigningClient();
|
|
58287
|
+
if (!this.signingClient || !this.wallet) {
|
|
58288
|
+
throw new Error("Signing client not initialized");
|
|
58289
|
+
}
|
|
58290
|
+
const [account] = await this.wallet.getAccounts();
|
|
58291
|
+
const creator = account.address;
|
|
58292
|
+
// Create the message object
|
|
58293
|
+
const msgRegisterNftAvatar = {
|
|
58294
|
+
creator,
|
|
58295
|
+
ethAddress,
|
|
58296
|
+
contractAddress,
|
|
58297
|
+
tokenId,
|
|
58298
|
+
ethSignature
|
|
58299
|
+
};
|
|
58300
|
+
// Create the transaction message
|
|
58301
|
+
const msg = {
|
|
58302
|
+
typeUrl: "/pokerchain.poker.v1.MsgRegisterNftAvatar",
|
|
58303
|
+
value: msgRegisterNftAvatar
|
|
58304
|
+
};
|
|
58305
|
+
const fee = gaslessFee();
|
|
58306
|
+
const memo = "Register NFT avatar via SDK";
|
|
58307
|
+
console.log("🖼️ Registering NFT avatar:", {
|
|
58308
|
+
creator,
|
|
58309
|
+
ethAddress,
|
|
58310
|
+
contractAddress,
|
|
58311
|
+
tokenId: tokenId.substring(0, 20) + (tokenId.length > 20 ? "..." : "")
|
|
58312
|
+
});
|
|
58313
|
+
try {
|
|
58314
|
+
const result = await this.signingClient.signAndBroadcast(creator, [msg], fee, memo);
|
|
58315
|
+
console.log("✅ NFT avatar registration successful:", result.transactionHash);
|
|
58316
|
+
return result.transactionHash;
|
|
58317
|
+
}
|
|
58318
|
+
catch (error) {
|
|
58319
|
+
console.error("❌ NFT avatar registration failed:", error);
|
|
58320
|
+
throw error;
|
|
58321
|
+
}
|
|
58322
|
+
}
|
|
58323
|
+
/**
|
|
58324
|
+
* Query a registered NFT avatar for a cosmos address
|
|
58325
|
+
*
|
|
58326
|
+
* @param cosmosAddress - The cosmos address to look up
|
|
58327
|
+
* @returns The NFT avatar data if registered, or null if not found
|
|
58328
|
+
*/
|
|
58329
|
+
async queryNftAvatar(cosmosAddress) {
|
|
58330
|
+
try {
|
|
58331
|
+
const response = await fetch(`${this.config.restEndpoint}/pokerchain/poker/nft_avatar/${encodeURIComponent(cosmosAddress)}`);
|
|
58332
|
+
if (!response.ok) {
|
|
58333
|
+
if (response.status === 404) {
|
|
58334
|
+
return null;
|
|
58335
|
+
}
|
|
58336
|
+
throw new Error(`Failed to query NFT avatar: ${response.statusText}`);
|
|
58337
|
+
}
|
|
58338
|
+
const data = await response.json();
|
|
58339
|
+
if (!data.contract_address || !data.token_id) {
|
|
58340
|
+
return null;
|
|
58341
|
+
}
|
|
58342
|
+
return {
|
|
58343
|
+
cosmosAddress: data.cosmos_address || cosmosAddress,
|
|
58344
|
+
ethAddress: data.eth_address || "",
|
|
58345
|
+
contractAddress: data.contract_address,
|
|
58346
|
+
tokenId: data.token_id
|
|
58347
|
+
};
|
|
58348
|
+
}
|
|
58349
|
+
catch (error) {
|
|
58350
|
+
console.error("❌ queryNftAvatar() failed:", error);
|
|
58351
|
+
throw error;
|
|
58352
|
+
}
|
|
58353
|
+
}
|
|
58117
58354
|
}
|
|
58118
58355
|
/**
|
|
58119
58356
|
* Create a signing client with a wallet
|