Skip to content

Commit 6d954cb

Browse files
authored
Update web3 sign-in message format (#3499)
1 parent 9eac0b8 commit 6d954cb

File tree

8 files changed

+68
-37
lines changed

8 files changed

+68
-37
lines changed

tee-worker/client-api/src/omni/interfaces/omniExecutor/definitions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default {
4242
},
4343
OmniAuth: {
4444
_enum: {
45-
Web3: "(Identity, HeimaMultiSignature)",
45+
Web3: "(Text, Identity, HeimaMultiSignature)",
4646
Email: "(Text, Text)",
4747
AuthToken: "(Text)",
4848
OAuth2: "(Identity, OAuth2Data)",

tee-worker/omni-executor/executor-primitives/src/auth.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl TryFrom<IdentitySerde> for Identity {
8686

8787
#[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)]
8888
pub enum OmniAuth {
89-
Web3(Identity, HeimaMultiSignature), // (Signer, Signature)
89+
Web3(String, Identity, HeimaMultiSignature), // (client_id, Signer, Signature)
9090
Email(Email, VerificationCode),
9191
AuthToken(JwtToken),
9292
OAuth2(Identity, OAuth2Data), // (Sender, OAuth2Data)

tee-worker/omni-executor/heima/authentication/src/web3.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@ use serde::{Deserialize, Serialize};
22

33
#[derive(Serialize, Deserialize, Clone)]
44
pub struct HeimaMessagePayload {
5+
pub client_id: String,
6+
pub omni_account: String,
57
pub message_code: String,
68
}

tee-worker/omni-executor/rpc-server/src/methods/omni/get_message_code.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use tracing::error;
1111

1212
#[derive(Deserialize)]
1313
pub struct GetMessageCodeParams {
14+
pub client_id: String,
1415
pub omni_account: String,
1516
}
1617

@@ -36,7 +37,11 @@ pub fn register_get_message_code(module: &mut RpcModule<RpcContext>) {
3637
Err(_) => return Err(ErrorCode::InternalError.into()),
3738
};
3839

39-
Ok::<HeimaMessagePayload, ErrorObject>(HeimaMessagePayload { message_code })
40+
Ok::<HeimaMessagePayload, ErrorObject>(HeimaMessagePayload {
41+
message_code,
42+
omni_account: omni_account.to_string(),
43+
client_id: params.client_id,
44+
})
4045
})
4146
.expect("Failed to register omni_getMessageCode method");
4247
}

tee-worker/omni-executor/rpc-server/src/verify_auth.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ impl Display for AuthenticationError {
4747

4848
pub async fn verify_auth(ctx: Arc<RpcContext>, auth: &OmniAuth) -> Result<(), AuthenticationError> {
4949
match auth {
50-
OmniAuth::Web3(ref signer, ref signature) => {
51-
verify_web3_authentication(ctx.storage_db.clone(), signer, signature)
50+
OmniAuth::Web3(ref client_id, ref signer, ref signature) => {
51+
verify_web3_authentication(ctx.storage_db.clone(), client_id, signer, signature)
5252
},
5353
OmniAuth::Email(ref email, ref verification_code) => {
5454
verify_email_authentication(ctx, email, verification_code)
@@ -68,6 +68,7 @@ pub async fn verify_auth(ctx: Arc<RpcContext>, auth: &OmniAuth) -> Result<(), Au
6868

6969
pub fn verify_web3_authentication(
7070
storage_db: Arc<StorageDB>,
71+
client_id: &str,
7172
signer: &Identity,
7273
signature: &HeimaMultiSignature,
7374
) -> Result<(), AuthenticationError> {
@@ -79,7 +80,11 @@ pub fn verify_web3_authentication(
7980
verification_code_storage
8081
.remove(&storage_key)
8182
.map_err(|_| AuthenticationError::VerificationCodeNotFound)?;
82-
let message = HeimaMessagePayload { message_code };
83+
let message = HeimaMessagePayload {
84+
client_id: client_id.to_string(),
85+
omni_account: signer.to_omni_account().to_string(),
86+
message_code,
87+
};
8388
let payload = serde_json::to_string(&message).expect("Failed to serialize payload");
8489
let hashed = blake2_256(payload.as_bytes());
8590

@@ -185,14 +190,23 @@ mod tests {
185190
.insert(&alice_omni_account.hash(), message_code.clone())
186191
.expect("insert");
187192

188-
let message = HeimaMessagePayload { message_code };
193+
let message = HeimaMessagePayload {
194+
message_code,
195+
omni_account: alice_omni_account.to_string(),
196+
client_id: "test_client".to_string(),
197+
};
189198
let payload = serde_json::to_string(&message).expect("serialize");
190199
let hashed = blake2_256(payload.as_bytes());
191200

192201
let signature = alice.sign(&hashed);
193202
let multi_signature = HeimaMultiSignature::from(signature);
194203

195-
let result = verify_web3_authentication(storage_db, &alice_identity, &multi_signature);
204+
let result = verify_web3_authentication(
205+
storage_db,
206+
"test_client",
207+
&alice_identity,
208+
&multi_signature,
209+
);
196210
assert!(result.is_ok());
197211
}
198212
}

tee-worker/omni-executor/ts-tests/integration-tests/omni_account.test.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { createIntegrationTestContext, IntegrationTestContext } from './utils/co
55
import { SubstrateSigner } from './utils/signer';
66
import { getOmniAccount } from './utils/omni_account';
77
import { createNativeTask, createNativeTaskWrapper, createOmniAccountPermission } from './utils/type_creators';
8-
import { getMessageCode, sendRawTaskPlain } from './utils/requests';
8+
import { getMessageToSign, sendRawTaskPlain } from './utils/requests';
99
import { buildWeb3ValidationData } from './utils/identity';
1010
import { fundAccount, sleep } from './utils/helpers';
1111
import { encodeAddress } from '@polkadot/util-crypto';
@@ -29,16 +29,16 @@ describe('OmniAccount', function () {
2929
let accountStore = await context.api.query.omniAccount.accountStore(omniAccount);
3030
assert.isTrue(accountStore.isNone, 'accountStore already exists');
3131

32-
let msgCode = await getMessageCode(context, omniAccount);
33-
console.log('msgCode:', msgCode);
32+
let msgToSign = await getMessageToSign(context, 'heima', omniAccount);
33+
console.log('msgCode:', msgToSign);
3434
const nativeTask = createNativeTask(context.api, ['CreateAccountStore', 'HeimaIdentity'], aliceIdentity);
3535
const nativeTaskWrapper = await createNativeTaskWrapper(
3636
context.api,
3737
nativeTask,
3838
aliceWallet,
39-
"00000",
39+
'00000',
4040
context.api.createType('Index', currentNonce),
41-
msgCode.message_code
41+
msgToSign
4242
);
4343
console.log('nativeTaskWrapper:', nativeTaskWrapper.toHuman());
4444
await sendRawTaskPlain(context, nativeTaskWrapper);
@@ -83,14 +83,14 @@ describe('OmniAccount', function () {
8383
[createOmniAccountPermission(context.api, 'All')],
8484
]
8585
);
86-
const msgCode = await getMessageCode(context, omniAccount);
86+
const msgToSign = await getMessageToSign(context, 'heima', omniAccount);
8787
const nativeTaskWrapper = await createNativeTaskWrapper(
8888
context.api,
8989
nativeTask,
9090
aliceWallet,
91-
"00001",
91+
'00001',
9292
context.api.createType('Index', currentNonce),
93-
msgCode.message_code
93+
msgToSign
9494
);
9595
await sendRawTaskPlain(context, nativeTaskWrapper);
9696
currentNonce++;
@@ -116,14 +116,14 @@ describe('OmniAccount', function () {
116116
['PublicizeAccount', '(HeimaIdentity, HeimaIdentity)'],
117117
[aliceIdentity, bobIdentity]
118118
);
119-
const msgCode = await getMessageCode(context, omniAccount);
119+
const msgToSign = await getMessageToSign(context, 'heima', omniAccount);
120120
const nativeTaskWrapper = await createNativeTaskWrapper(
121121
context.api,
122122
nativeTask,
123123
aliceWallet,
124-
"00002",
124+
'00002',
125125
context.api.createType('Index', currentNonce),
126-
msgCode.message_code
126+
msgToSign
127127
);
128128
await sendRawTaskPlain(context, nativeTaskWrapper);
129129
currentNonce++;
@@ -168,14 +168,14 @@ describe('OmniAccount', function () {
168168
['SetPermissions', '(HeimaIdentity, HeimaIdentity, Vec<OmniAccountPermission>)'],
169169
[aliceIdentity, bobIdentity, newPermissions]
170170
);
171-
const msgCode = await getMessageCode(context, omniAccount);
171+
const msgToSign = await getMessageToSign(context, 'heima', omniAccount);
172172
const nativeTaskWrapper = await createNativeTaskWrapper(
173173
context.api,
174174
nativeTask,
175175
aliceWallet,
176-
"00003",
176+
'00003',
177177
context.api.createType('Index', currentNonce),
178-
msgCode.message_code
178+
msgToSign
179179
);
180180
await sendRawTaskPlain(context, nativeTaskWrapper);
181181
currentNonce++;
@@ -208,14 +208,14 @@ describe('OmniAccount', function () {
208208
['RemoveAccounts', '(HeimaIdentity, Vec<HeimaIdentity>)'],
209209
[aliceIdentity, [bobIdentity]]
210210
);
211-
const msgCode = await getMessageCode(context, omniAccount);
211+
const msgToSign = await getMessageToSign(context, 'heima', omniAccount);
212212
const nativeTaskWrapper = await createNativeTaskWrapper(
213213
context.api,
214214
nativeTask,
215215
aliceWallet,
216-
"000004",
216+
'000004',
217217
context.api.createType('Index', currentNonce),
218-
msgCode.message_code
218+
msgToSign
219219
);
220220
await sendRawTaskPlain(context, nativeTaskWrapper);
221221
currentNonce++;
@@ -246,14 +246,14 @@ describe('OmniAccount', function () {
246246
['RequestIntent', '(HeimaIdentity, u32, Intent)'],
247247
[aliceIdentity, intentId, intent]
248248
);
249-
const msgCode = await getMessageCode(context, omniAccount);
249+
const msgToSign = await getMessageToSign(context, 'heima', omniAccount);
250250
const nativeTaskWrapper = await createNativeTaskWrapper(
251251
context.api,
252252
nativeTask,
253253
aliceWallet,
254-
"00005",
254+
'00005',
255255
context.api.createType('Index', currentNonce),
256-
msgCode.message_code
256+
msgToSign
257257
);
258258
const response = await sendRawTaskPlain(context, nativeTaskWrapper);
259259
console.log('response:', response.toHuman());

tee-worker/omni-executor/ts-tests/integration-tests/utils/requests.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,27 @@ export async function sendRawTaskPlain(
3939
return sendRequest(context.teeWsClient, request, context.api, onMessageReceived);
4040
}
4141

42-
type GetMessageCodeResponse = {
42+
export type SignMessagePayload = {
43+
client_id: string;
44+
omni_account: string;
4345
message_code: string;
4446
};
4547

46-
export async function getMessageCode(
48+
/**
49+
* Retrieves the message to sign for a given client ID and Omni account.
50+
*/
51+
export async function getMessageToSign(
4752
context: IntegrationTestContext,
53+
clientId: string,
4854
omniAccount: string
49-
): Promise<GetMessageCodeResponse> {
50-
const request = createJsonRpcRequest('omni_getMessageCode', { omni_account: omniAccount }, nextRequestId(context));
55+
): Promise<SignMessagePayload> {
56+
const request = createJsonRpcRequest(
57+
'omni_getMessageCode',
58+
{ client_id: clientId, omni_account: omniAccount },
59+
nextRequestId(context)
60+
);
5161

52-
const response = new Promise<GetMessageCodeResponse>((resolve, reject) =>
62+
const response = new Promise<SignMessagePayload>((resolve, reject) =>
5363
context.teeWsClient.onMessage.addListener((data) => {
5464
const parsed = JSON.parse(data);
5565
if (parsed.id !== request.id) {

tee-worker/omni-executor/ts-tests/integration-tests/utils/type_creators.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
NativeTaskWrapper,
1414
} from '@heima-network/api-argument/omni';
1515
import { Signer } from './signer';
16-
import { getMessageCode } from './requests';
16+
import { SignMessagePayload } from './requests';
1717

1818
export async function createIdentityType(
1919
api: ApiPromise,
@@ -76,9 +76,9 @@ export async function createNativeTaskWrapper(
7676
signer: Signer,
7777
taskId: String,
7878
nonce: Codec,
79-
msgCode: string
79+
msgToSign: SignMessagePayload
8080
): Promise<NativeTaskWrapper> {
81-
const payload = JSON.stringify({ message_code: msgCode });
81+
const payload = JSON.stringify(msgToSign);
8282
const hashedPayload = blake2AsHex(payload, 256);
8383
const signerIdentity = await signer.getIdentity(api);
8484

@@ -88,7 +88,7 @@ export async function createNativeTaskWrapper(
8888
});
8989

9090
const auth: OmniAuth = api.createType('OmniAuth', {
91-
Web3: api.createType('(Identity, HeimaMultiSignature)', [signerIdentity, signature]),
91+
Web3: api.createType('(Text, Identity, HeimaMultiSignature)', ['heima', signerIdentity, signature]),
9292
});
9393
let n = api.createType('Option<Nonce>', nonce);
9494
let a = api.createType('Option<OmniAuth>', auth);

0 commit comments

Comments
 (0)