Skip to content
Merged
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
8 changes: 4 additions & 4 deletions packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/cross-inpage-provider-core",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down Expand Up @@ -29,9 +29,9 @@
},
"dependencies": {
"@noble/hashes": "^1.7.1",
"@onekeyfe/cross-inpage-provider-errors": "2.2.62",
"@onekeyfe/cross-inpage-provider-events": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62",
"@onekeyfe/cross-inpage-provider-errors": "2.2.63",
"@onekeyfe/cross-inpage-provider-events": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63",
"events": "^3.3.0",
"lodash-es": "^4.17.21",
"ms": "^2.1.3"
Expand Down
6 changes: 3 additions & 3 deletions packages/desktop/desktop-bridge-injected/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/desktop-bridge-injected",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down Expand Up @@ -33,7 +33,7 @@
"electron": "^17.2.0"
},
"dependencies": {
"@onekeyfe/cross-inpage-provider-core": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62"
"@onekeyfe/cross-inpage-provider-core": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63"
}
}
8 changes: 4 additions & 4 deletions packages/e2e/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@onekeyfe/e2e",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down Expand Up @@ -30,9 +30,9 @@
"test:ui": "yarn env && npx playwright test --ui "
},
"dependencies": {
"@onekeyfe/cross-inpage-provider-injected": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62",
"@onekeyfe/inpage-providers-hub": "2.2.62",
"@onekeyfe/cross-inpage-provider-injected": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63",
"@onekeyfe/inpage-providers-hub": "2.2.63",
"lodash-es": "^4.17.21"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/empty/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/cross-inpage-provider-empty",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down
2 changes: 1 addition & 1 deletion packages/errors/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/cross-inpage-provider-errors",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down
2 changes: 1 addition & 1 deletion packages/events/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/cross-inpage-provider-events",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down
156 changes: 156 additions & 0 deletions packages/example/components/chains/cosmos/example.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import { PubKey } from 'cosmjs-types/cosmos/crypto/ed25519/keys';
import { Any } from 'cosmjs-types/google/protobuf/any';
import { AuthInfo, Fee, SignerInfo, Tx, TxBody, TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx';

import { SIV, PolyfillCryptoProvider } from 'miscreant';
import { SecretNetworkClient } from 'secretjs';
import { IProviderApi, IProviderInfo } from './types';
import { ApiPayload, ApiGroup } from '../../ApiActuator';
import { useWallet } from '../../../components/connect/WalletContext';
Expand Down Expand Up @@ -455,6 +457,160 @@ export default function Example() {
/>
</ApiGroup>

<ApiGroup title="Enigma (Secret Network)">
<ApiPayload
title="getPubkey"
description="getPubkey() → 验证: 和 encrypt() 输出中嵌入的 pubkey 交叉校验"
presupposeParams={[
{
id: 'getPubkey',
name: 'getPubkey',
value: JSON.stringify({
contractCodeHash:
'af74387e276be8874f07bec3a87023ee49b0e7ebe08178c49d0a49c3c98ed60e',
msg: { balance: {} },
}),
},
]}
onExecute={async () => {
const utils = provider?.getEnigmaUtils('secret-4');
const pubkey = await utils?.getPubkey();
return pubkey ? bytesToHex(pubkey) : 'null';
}}
onValidate={async (request: string) => {
const obj = JSON.parse(request);
const utils = provider?.getEnigmaUtils('secret-4');

const pubkey = await utils?.getPubkey();
const encrypted = await utils?.encrypt(obj.contractCodeHash, obj.msg);
if (!pubkey || !encrypted) return 'null';

const embeddedPubkey = encrypted.slice(32, 64);
const pubkeyHex = bytesToHex(pubkey);
const embeddedHex = bytesToHex(embeddedPubkey);

return JSON.stringify({
valid: pubkeyHex === embeddedHex,
getPubkey: pubkeyHex,
encryptEmbeddedPubkey: embeddedHex,
});
}}
/>
<ApiPayload
title="encrypt"
description="getEnigmaUtils('secret-4').encrypt() → 验证: decrypt round-trip"
presupposeParams={[
{
id: 'encrypt',
name: 'encrypt',
value: JSON.stringify({
contractCodeHash:
'af74387e276be8874f07bec3a87023ee49b0e7ebe08178c49d0a49c3c98ed60e',
msg: { balance: {} },
}),
},
]}
onExecute={async (request: string) => {
const obj = JSON.parse(request);
const utils = provider?.getEnigmaUtils('secret-4');
const encrypted = await utils?.encrypt(obj.contractCodeHash, obj.msg);
return encrypted ? bytesToHex(encrypted) : 'null';
}}
onValidate={async (request: string, response: string) => {
const encryptedBytes = hexToBytes(response);
const nonce = encryptedBytes.slice(0, 32);
const ciphertext = encryptedBytes.slice(64);

const utils = provider?.getEnigmaUtils('secret-4');
const decrypted = await utils?.decrypt(ciphertext, nonce);
const plaintext = new TextDecoder().decode(decrypted);

const obj = JSON.parse(request);
const expected = String(obj.contractCodeHash) + JSON.stringify(obj.msg);
return JSON.stringify({
valid: plaintext === expected,
decrypted: plaintext,
expected,
});
}}
/>
<ApiPayload
title="getTxEncryptionKey"
description="getEnigmaUtils('secret-4').getTxEncryptionKey() → 验证: 用 key 手动 AES-SIV 解密"
presupposeParams={[
{
id: 'getTxEncryptionKey',
name: 'getTxEncryptionKey',
value: JSON.stringify({
contractCodeHash:
'af74387e276be8874f07bec3a87023ee49b0e7ebe08178c49d0a49c3c98ed60e',
msg: { balance: {} },
}),
},
]}
onExecute={async (request: string) => {
const obj = JSON.parse(request);
const utils = provider?.getEnigmaUtils('secret-4');
const encrypted = await utils?.encrypt(obj.contractCodeHash, obj.msg);
if (!encrypted) return 'null';
const nonce = encrypted.slice(0, 32);
const key = await utils?.getTxEncryptionKey(nonce);
return JSON.stringify({
encryptedHex: bytesToHex(encrypted),
keyHex: key ? bytesToHex(key) : 'null',
});
}}
onValidate={async (request: string, response: string) => {
const res = JSON.parse(response);
const encryptedBytes = hexToBytes(res.encryptedHex);
const ciphertext = encryptedBytes.slice(64);
const keyBytes = hexToBytes(res.keyHex);

const siv = await SIV.importKey(keyBytes, 'AES-SIV', new PolyfillCryptoProvider());
const decrypted: Uint8Array = await siv.open(ciphertext, [new Uint8Array()]);
const plaintext = new TextDecoder().decode(decrypted);

const obj = JSON.parse(request);

// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
const expected = String(obj.contractCodeHash) + JSON.stringify(obj.msg);
return JSON.stringify({
valid: plaintext === expected,
decrypted: plaintext,
expected,
});
}}
/>
<ApiPayload
title="secretjs queryContract"
description="端到端验证: 用 secretjs + getEnigmaUtils 查询 sSCRT 合约 token_info"
disableRequestContent
onExecute={async () => {
const chainId = 'secret-4';
await provider?.enable(chainId);
const offlineSigner = provider?.getOfflineSigner(chainId);
const accounts = await offlineSigner?.getAccounts();
const enigmaUtils = provider?.getEnigmaUtils(chainId);

const secretjs = new SecretNetworkClient({
url: 'https://secret-4.api.trivium.network:1317',
chainId,
wallet: offlineSigner,
walletAddress: accounts?.[0]?.address ?? '',
encryptionUtils: enigmaUtils,
});

const result = await secretjs.query.compute.queryContract({
contract_address: 'secret1k0jntykt7e4g3y88ltc60czgjuqdy4c9e8fzek',
code_hash: 'af74387e276be8874f07bec3a87023ee49b0e7ebe08178c49d0a49c3c98ed60e',
query: { token_info: {} },
});

return JSON.stringify(result);
}}
/>
</ApiGroup>

<DappList dapps={dapps} />
</>
);
Expand Down
26 changes: 14 additions & 12 deletions packages/example/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/cross-inpage-provider-example",
"version": "2.2.62",
"version": "2.2.63",
"private": true,
"scripts": {
"postinstall": "patch-package",
Expand Down Expand Up @@ -32,17 +32,17 @@
"@metamask/onboarding": "^1.0.1",
"@mizuwallet-sdk/core": "^1.4.0",
"@mysten/dapp-kit": "0.15.6",
"@onekeyfe/cross-inpage-provider-core": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62",
"@onekeyfe/onekey-aptos-provider": "2.2.62",
"@onekeyfe/onekey-cardano-provider": "2.2.62",
"@onekeyfe/onekey-conflux-provider": "2.2.62",
"@onekeyfe/onekey-cosmos-provider": "2.2.62",
"@onekeyfe/onekey-near-provider": "2.2.62",
"@onekeyfe/onekey-solana-provider": "2.2.62",
"@onekeyfe/onekey-sui-provider": "2.2.62",
"@onekeyfe/onekey-tron-provider": "2.2.62",
"@onekeyfe/onekey-webln-provider": "2.2.62",
"@onekeyfe/cross-inpage-provider-core": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63",
"@onekeyfe/onekey-aptos-provider": "2.2.63",
"@onekeyfe/onekey-cardano-provider": "2.2.63",
"@onekeyfe/onekey-conflux-provider": "2.2.63",
"@onekeyfe/onekey-cosmos-provider": "2.2.63",
"@onekeyfe/onekey-near-provider": "2.2.63",
"@onekeyfe/onekey-solana-provider": "2.2.63",
"@onekeyfe/onekey-sui-provider": "2.2.63",
"@onekeyfe/onekey-tron-provider": "2.2.63",
"@onekeyfe/onekey-webln-provider": "2.2.63",
"@polkadot/api": "^15",
"@polkadot/extension-dapp": "^0.57.1",
"@radix-ui/react-checkbox": "^1.1.2",
Expand Down Expand Up @@ -109,6 +109,7 @@
"long": "^4.0.0",
"lucid-cardano": "^0.10.11",
"lucide-react": "^0.378.0",
"miscreant": "^0.3.2",
"msw": "^2.4.1",
"near-api-js": "^0.44.2",
"next": "^13.5.9",
Expand All @@ -119,6 +120,7 @@
"react-arborist": "^3.0.2",
"react-dom": "^18.3.1",
"react-resizable-panels": "^2.0.19",
"secretjs": "^1.12.0",
"tailwind-merge": "^2.3.0",
"tailwindcss-animate": "^1.0.7",
"tiny-secp256k1": "^2.2.3",
Expand Down
13 changes: 13 additions & 0 deletions packages/example/patches/miscreant+0.3.2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/node_modules/miscreant/src/providers/webcrypto.ts b/node_modules/miscreant/src/providers/webcrypto.ts
index 1234567..abcdefg 100644
--- a/node_modules/miscreant/src/providers/webcrypto.ts
+++ b/node_modules/miscreant/src/providers/webcrypto.ts
@@ -17,7 +17,7 @@ export class WebCryptoProvider implements ICryptoProvider {
public async importCTRKey(keyData: Uint8Array): Promise<ICTRLike> {
try {
return await WebCryptoAesCtr.importKey(this.crypto, keyData);
- } catch (e) {
+ } catch (e: any) {
if (e.message.includes("unsupported")) {
throw new NotImplementedError("WebCryptoProvider: AES-CTR unsupported. Use PolyfillCryptoProvider.");
} else {
6 changes: 3 additions & 3 deletions packages/extension/extension-bridge-hosted/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/extension-bridge-hosted",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand All @@ -27,8 +27,8 @@
"start": "tsc --watch"
},
"dependencies": {
"@onekeyfe/cross-inpage-provider-core": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62",
"@onekeyfe/cross-inpage-provider-core": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63",
"uuid": "^8.3.2"
},
"devDependencies": {
Expand Down
6 changes: 3 additions & 3 deletions packages/extension/extension-bridge-injected/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/extension-bridge-injected",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand All @@ -27,7 +27,7 @@
"start": "tsc --watch"
},
"dependencies": {
"@onekeyfe/cross-inpage-provider-core": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62"
"@onekeyfe/cross-inpage-provider-core": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63"
}
}
14 changes: 7 additions & 7 deletions packages/injected/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/cross-inpage-provider-injected",
"version": "2.2.62",
"version": "2.2.63",
"keywords": [
"cross-inpage-provider"
],
Expand Down Expand Up @@ -48,12 +48,12 @@
"dependencies": {
"@noble/curves": "1.8.0",
"@noble/hashes": "1.7.2",
"@onekeyfe/cross-inpage-provider-core": "2.2.62",
"@onekeyfe/cross-inpage-provider-types": "2.2.62",
"@onekeyfe/desktop-bridge-injected": "2.2.62",
"@onekeyfe/extension-bridge-injected": "2.2.62",
"@onekeyfe/inpage-providers-hub": "2.2.62",
"@onekeyfe/native-bridge-injected": "2.2.62",
"@onekeyfe/cross-inpage-provider-core": "2.2.63",
"@onekeyfe/cross-inpage-provider-types": "2.2.63",
"@onekeyfe/desktop-bridge-injected": "2.2.63",
"@onekeyfe/extension-bridge-injected": "2.2.63",
"@onekeyfe/inpage-providers-hub": "2.2.63",
"@onekeyfe/native-bridge-injected": "2.2.63",
"bignumber.js": "^9.1.2",
"buffer": "^6.0.3",
"cipher-base": "^1.0.6",
Expand Down
Loading
Loading