-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: ada support conway #376
base: onekey
Are you sure you want to change the base?
Conversation
5e10d92
to
ec6d810
Compare
Walkthrough此次变更主要集中在Cardano相关代码的更新上。 Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant CardanoSignTransaction
participant AuxiliaryData
participant Certificate
User->>CardanoSignTransaction: 调用signTx()
CardanoSignTransaction->>AuxiliaryData: 验证参数
AuxiliaryData-->>CardanoSignTransaction: 返回验证结果
CardanoSignTransaction->>Certificate: 调用transformCertificate()
Certificate-->>CardanoSignTransaction: 返回证书信息
CardanoSignTransaction-->>User: 返回签名结果
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
🧹 Outside diff range comments (2)
packages/core/src/api/cardano/helper/auxiliaryData.ts (2)
Line range hint
39-90
: 修正类型定义,避免类型错误多处使用
@ts-expect-error
忽略类型错误。更新类型定义,包含可选的旧参数,提升代码质量。修改类型定义如下:
+ interface CardanoCVoteRegistrationParameters { + votePublicKey: string; + votingPublicKey?: string; + stakingPath: string | number[]; + nonce: number; + format?: number; + delegations?: CardanoCVoteRegistrationDelegation[]; + votingPurpose?: number; + paymentAddress?: string; + paymentAddressParameters?: AddressParameters; + rewardAddressParameters?: AddressParameters; + }这样可避免类型错误,也无需使用
@ts-expect-error
。
Line range hint
71-76
: 更新错误信息中的术语错误信息中提到了 "governance registration",请改为 "cVote registration" 以保持一致。
请修改错误信息:
- `At most ${MAX_DELEGATION_COUNT} delegations are allowed in a governance registration` + `At most ${MAX_DELEGATION_COUNT} delegations are allowed in a cVote registration`
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (6)
- packages/core/src/api/cardano/CardanoSignTransaction.ts (7 hunks)
- packages/core/src/api/cardano/helper/auxiliaryData.ts (3 hunks)
- packages/core/src/api/cardano/helper/certificate.ts (4 hunks)
- packages/core/src/data/messages/messages.json (11 hunks)
- packages/core/src/types/api/cardano.ts (5 hunks)
- packages/hd-transport/src/types/messages.ts (9 hunks)
🧰 Additional context used
🪛 Biome
packages/core/src/api/cardano/CardanoSignTransaction.ts
[error] 58-58: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
🔇 Additional comments (32)
packages/core/src/data/messages/messages.json (6)
1892-1896
: 新增的 Cardano 证书类型新增了三种 Cardano 证书类型:STAKE_REGISTRATION_CONWAY、STAKE_DEREGISTRATION_CONWAY 和 VOTE_DELEGATION。这些添加反映了 Cardano 区块链的新功能。
2484-2500
: 新增 CardanoDRep 消息类型添加了新的 CardanoDRep 消息类型,包含 type、key_hash 和 script_hash 字段。这个新类型可能与 Cardano 的去中心化代表(DRep)功能有关。
2531-2538
: CardanoTxCertificate 消息类型的修改在 CardanoTxCertificate 消息类型中添加了 deposit 和 drep 字段。这些变更似乎与新的质押和投票机制有关。
Line range hint
2567-2622
: CardanoCVoteRegistrationParametersType 的更新CardanoCVoteRegistrationParametersType 消息类型进行了多项更新,包括添加了 voting_purpose 和 payment_address 字段。这些变更可能与 Cardano 的治理和投票系统有关。
1916-1919
: CardanoTxAuxiliaryDataSupplementType 枚举的修改CardanoTxAuxiliaryDataSupplementType 枚举中的 CATALYST_REGISTRATION 值被 CVOTE_REGISTRATION_SIGNATURE 替换。这表明 Cardano 可能正在更新其附加数据处理方式。
Line range hint
1919-1924
: 新增 CardanoCVoteRegistrationFormat 枚举添加了新的 CardanoCVoteRegistrationFormat 枚举,包含 CIP15 和 CIP36 两个值。这可能与 Cardano 改进提案(CIP)相关的新投票注册格式有关。
packages/core/src/types/api/cardano.ts (7)
35-39
: 新增 CardanoDRep 接口定义了新的
CardanoDRep
接口,包含type
、keyHash
和scriptHash
属性。
48-49
: 在 CardanoCertificate 中添加可选属性在
CardanoCertificate
接口中,添加了可选的deposit
和dRep
属性。
140-141
: 更新 CardanoCVoteRegistrationDelegation 接口接口重命名为
CardanoCVoteRegistrationDelegation
,属性votingPublicKey
更名为votePublicKey
。
152-160
: 更新 CardanoCVoteRegistrationParameters 接口接口重命名为
CardanoCVoteRegistrationParameters
,并更新了以下属性:
votePublicKey
设为可选- 添加
paymentAddressParameters
- 更新
format
属性- 添加
delegations
、votingPurpose
和paymentAddress
属性
165-165
: 在 CardanoAuxiliaryData 中添加新属性添加了
cVoteRegistrationParameters
属性。
190-191
: 在 CardanoSignTransaction 中添加可选参数添加了可选参数
chunkify
和tagCborSets
。
204-204
: 更新 CardanoAuxiliaryDataSupplement 接口添加了可选属性
cVoteRegistrationSignature
。packages/core/src/api/cardano/helper/certificate.ts (7)
12-12
: 符合编码规范成功引入
CardanoDRep
类型,符合项目需求。
160-190
:transformDRep
函数实现正确函数
transformDRep
正确地验证并转换了CardanoDRep
对象,逻辑清晰,符合预期。
211-216
: 正确添加了deposit
参数的验证为
STAKE_REGISTRATION_CONWAY
和STAKE_DEREGISTRATION_CONWAY
类型添加了deposit
参数的验证,确保了参数完整性。
218-220
: 正确添加了dRep
参数的验证为
VOTE_DELEGATION
类型添加了dRep
参数的验证,确保了参数完整性。
228-229
: 正确调用了transformDRep
函数在转换证书时正确调用了
transformDRep
函数,处理了dRep
字段。
238-239
: 在证书对象中包含了deposit
和drep
字段在返回的证书对象中添加了
deposit
和drep
字段,确保了新参数的传递。
Line range hint
211-239
: 请验证新证书类型在代码库中被正确处理建议检查
STAKE_REGISTRATION_CONWAY
、STAKE_DEREGISTRATION_CONWAY
和VOTE_DELEGATION
这几个新证书类型在代码库的其他部分是否被正确处理,确保兼容性和功能完整性。运行以下脚本以查找代码库中对这些证书类型的引用:
✅ Verification successful
验证通过
新证书类型在代码库中被正确处理。🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 描述:查找代码库中使用新证书类型的地方 # 测试:搜索新证书类型的使用。期望:显示所有引用新证书类型的文件和行号。 rg --type typescript 'CardanoCertificateType\.(STAKE_REGISTRATION_CONWAY|STAKE_DEREGISTRATION_CONWAY|VOTE_DELEGATION)'Length of output: 155
Script:
#!/bin/bash # 描述:查找代码库中使用新证书类型的地方 # 搜索所有 .ts 和 .tsx 文件中使用新证书类型的地方 fd --extension ts --extension tsx | xargs rg 'CardanoCertificateType\.(STAKE_REGISTRATION_CONWAY|STAKE_DEREGISTRATION_CONWAY|VOTE_DELEGATION)'Length of output: 958
Script:
#!/bin/bash # 描述:提取使用新证书类型的代码上下文 # 定义包含新证书类型的文件 files=( "packages/core/src/api/cardano/helper/certificate.ts" "packages/core/src/api/cardano/CardanoSignTransaction.ts" ) # 提取每个文件中包含新证书类型的行及其上下文 for file in "${files[@]}"; do echo "文件: $file" rg -C 3 'CardanoCertificateType\.(STAKE_REGISTRATION_CONWAY|STAKE_DEREGISTRATION_CONWAY|VOTE_DELEGATION)' "$file" echo "" doneLength of output: 1527
packages/core/src/api/cardano/CardanoSignTransaction.ts (8)
1-2
: LGTM!引入必要的模块
semver
、ERRORS
和HardwareErrorCode
。
29-29
: 类型别名导入正确。将
CardanoSignTransaction
导入为CardanoSignTransactionType
,提高了代码清晰度。
31-32
: 导入模块正确。正确引入了
DeviceFirmwareRange
、getDeviceFirmwareVersion
和getMethodVersionRange
模块。
87-88
: 参数验证更新正确。添加了
chunkify
和tagCborSets
参数的验证。
192-193
: 参数赋值正确。将
chunkify
和tagCborSets
添加到this.params
中。
197-222
: 新增hasConway
方法,逻辑正确。
hasConway
方法正确检测了Conway相关的参数和证书。
224-229
: 新增supportConwayVersionRange
方法,定义正确。正确定义了支持Conway功能的固件版本范围。
278-279
: 正确添加chunkify
和tagCborSets
到signTxInitMessage
。packages/hd-transport/src/types/messages.ts (4)
761-765
: 新枚举CardanoDRepType
定义合理
CardanoDRepType
枚举的定义清晰,命名直观,符合代码风格。
844-844
: 新增属性chunkify
在
CardanoGetAddress
类型中,添加了chunkify?: boolean;
属性。请确保在相关逻辑中正确处理此新属性。
888-889
: 新增属性chunkify
和tag_cbor_sets
在
CardanoSignTxInit
类型中,添加了chunkify?: boolean;
和tag_cbor_sets?: boolean;
属性。请确保在使用该类型时正确处理这些新属性。
968-974
: 新增类型CardanoDRep
定义了新的类型
CardanoDRep
,结构清晰,字段命名合理。
42f0292
to
37b0a00
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 12
🧹 Outside diff range comments (1)
packages/core/src/data/messages/messages.json (1)
Line range hint
1916-2622
: Conway 时代的变更看起来很全面对 Cardano 相关消息结构的修改反映了 Conway 时代的新特性。这些变更看起来一致且全面。
建议:为了保持一致性,考虑使用 "CVote" 前缀替换所有与投票相关的 "Vote" 前缀。例如,将
VOTE_DELEGATION
改为CVOTE_DELEGATION
。
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (12)
- packages/core/src/api/cardano/CardanoSignTransaction.ts (7 hunks)
- packages/core/src/api/cardano/helper/auxiliaryData.ts (3 hunks)
- packages/core/src/api/cardano/helper/certificate.ts (4 hunks)
- packages/core/src/api/ton/TonSignMessage.ts (1 hunks)
- packages/core/src/api/ton/TonSignProof.ts (1 hunks)
- packages/core/src/data/messages/messages.json (11 hunks)
- packages/core/src/types/api/cardano.ts (6 hunks)
- packages/core/src/types/api/tonSignMessage.ts (1 hunks)
- packages/core/src/types/api/tonSignProof.ts (1 hunks)
- packages/hd-transport/scripts/protobuf-patches/index.js (2 hunks)
- packages/hd-transport/src/types/messages.ts (12 hunks)
- submodules/firmware (1 hunks)
🧰 Additional context used
🪛 Biome
packages/core/src/api/cardano/CardanoSignTransaction.ts
[error] 58-58: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
🔇 Additional comments (33)
packages/core/src/types/api/tonSignProof.ts (3)
1-6
: 导入语句更新正确。新增的
UintType
导入与后续的类型更改相符。这种做法有助于保持代码的清晰度和类型安全性。
Line range hint
1-28
: 总体评价:代码改动合理,提高了类型安全性。此次更新主要涉及
UintType
的引入和expireAt
属性类型的修改。这些变更有助于提高代码的类型安全性和一致性。建议在合并前,仔细检查这些改动对现有代码的影响。
13-13
: 类型更新合理,建议验证影响。将
expireAt
的类型从number
改为UintType
提高了类型安全性。这是个好改动。不过,请确保检查使用
TonSignProofParams
的所有地方,以避免潜在的类型不匹配问题。运行以下脚本来查找可能受影响的代码:
✅ Verification successful
类型更新合理,建议验证影响。
之前的脚本无法识别
typescript
类型,请运行以下脚本以查找使用TonSignProofParams
的位置:
类型更新已验证,无问题。
expireAt
的类型已从number
更新为UintType
,并且所有使用此类型的地方均已正确处理,未发现类型不匹配的问题。🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 描述:查找使用 TonSignProofParams 的地方 rg --type typescript "TonSignProofParams" -A 5 -B 5Length of output: 86
Script:
#!/bin/bash # 查找使用 TonSignProofParams 的地方 rg "TonSignProofParams" --glob "*.ts" --glob "*.tsx" -A 5 -B 5Length of output: 4026
packages/core/src/types/api/tonSignMessage.ts (3)
1-6
: 导入更新获批!新增了 UintType 的导入,与后续类型定义的变更一致。这提升了类型安全性。
21-21
: 过期时间字段类型更新获批!将 expireAt 的类型改为 UintType 与其他字段保持一致,提高了时间戳的精确度。
Line range hint
1-43
: 总体评价:代码质量提升!此次更新统一使用 UintType,提高了类型安全性和一致性。建议适当添加注释,解释 UintType 的含义和某些字段的用途,以进一步提升代码可读性。
packages/core/src/api/ton/TonSignProof.ts (2)
Line range hint
1-58
: 代码总体评审除了 'expireAt' 参数的变更外,其他代码保持不变。整体结构清晰,功能完整。
建议在解决 'expireAt' 的问题后,进行全面测试以确保功能正常。
19-19
: 检查 'expireAt' 的类型变更'expireAt' 参数的类型限制被移除了。这可能导致类型相关的问题。
请确认这是有意为之。如果是,考虑在使用此值的地方添加类型检查。如果不是,建议恢复类型规定。
packages/hd-transport/scripts/protobuf-patches/index.js (2)
205-209
: 新增了 TON 相关的字段类型为 TON 签名消息和证明添加了新的无符号整数类型字段:
TonSignMessage
新增了ton_amount
、jetton_amount
、fwd_fee
和ext_ton_amount
。TonSignProof
新增了expire_at
。这些新字段可能是为了增强 TON 区块链的支持。请确保相关的 TON 处理逻辑已更新,以利用这些新字段。
运行以下脚本来验证 TON 相关更改:
#!/bin/bash # 描述:检查 TON 相关字段的使用情况 # 测试:搜索 TonSignMessage 和 TonSignProof 的使用 echo "检查 TON 相关字段的使用:" rg --type typescript "TonSignMessage|TonSignProof"
130-130
: 新增和修改了几个字段的规则这些更改调整了多个字段的必填/可选状态:
CardanoTxCertificate.deposit
现在是必填的。GetOwnershipProof.ownership_ids
变为可选。- NEM 相关的几个字段也变为可选。
这些变化可能会影响 protobuf 的序列化和反序列化过程。请确保相关的代码已经适应了这些新规则。
运行以下脚本来验证这些更改的影响:
✅ Verification successful
验证通过:未发现受影响字段的使用
- 修改后的字段在代码库中暂无使用记录。
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 描述:检查受影响字段的使用情况 # 测试:搜索 CardanoTxCertificate.deposit 的使用 echo "检查 CardanoTxCertificate.deposit 的使用:" rg --type typescript "CardanoTxCertificate.*deposit" # 测试:搜索 GetOwnershipProof.ownership_ids 的使用 echo "检查 GetOwnershipProof.ownership_ids 的使用:" rg --type typescript "GetOwnershipProof.*ownership_ids" # 测试:搜索 NEM 相关字段的使用 echo "检查 NEM 相关字段的使用:" rg --type typescript "NEMTransfer.*mosaics|NEMMosaicDefinition.*networks|NEMAggregateModification.*modifications"Length of output: 223
Script:
#!/bin/bash # 描述:检查受影响字段的使用情况 # 测试:搜索 CardanoTxCertificate.deposit 的使用 echo "检查 CardanoTxCertificate.deposit 的使用:" rg --type ts "CardanoTxCertificate\.deposit" # 测试:搜索 GetOwnershipProof.ownership_ids 的使用 echo "检查 GetOwnershipProof.ownership_ids 的使用:" rg --type ts "GetOwnershipProof\.ownership_ids" # 测试:搜索 NEM 相关字段的使用 echo "检查 NEM 相关字段的使用:" rg --type ts "NEMTransfer\..*mosaics|NEMMosaicDefinition\..*networks|NEMAggregateModification\..*modifications"Length of output: 423
packages/core/src/api/cardano/helper/auxiliaryData.ts (5)
11-12
: 导入新的类型成功引入了
CardanoCVoteRegistrationParameters
和CardanoCVoteRegistrationDelegation
,为 CVote 功能提供了类型支持。
19-27
: 旧参数兼容处理在
transformDelegation
函数中,对旧参数votingPublicKey
进行了兼容处理,并建议使用新参数votePublicKey
。确保了代码的向后兼容性。
43-55
: 处理旧参数,保持兼容性
transformCvoteRegistrationParameters
函数中,对旧参数votingPublicKey
和rewardAddressParameters
进行了兼容处理,并提示用户使用新的参数名称。这有助于平滑过渡到新版本的参数。
57-65
: 完善的参数验证对
cVoteRegistrationParameters
的各项参数进行了验证,确保输入数据的正确性,提升了代码的健壮性。
117-127
: 保持向后兼容在
modifyAuxiliaryDataForBackwardsCompatibility
函数中,对cvote_registration_parameters.payment_address_parameters
进行了兼容性修改,确保旧版本的数据仍可正常使用。packages/core/src/types/api/cardano.ts (6)
49-50
: 在 'CardanoCertificate' 中新增属性'CardanoCertificate' 接口新增了 'deposit' 和 'dRep' 属性。请确认这些属性在相关流程中已正确处理。
141-143
: 接口重命名和属性更新接口重命名为 'CardanoCVoteRegistrationDelegation',并将 'votingPublicKey' 更名为 'votePublicKey'。请确保所有引用和使用均已更新。
153-161
: 新增 'CardanoCVoteRegistrationParameters' 接口新接口定义清晰简洁。注意 'votePublicKey' 为可选项,确认这符合需求。确保所有参数在实现中正确使用。
166-166
: 更新 'CardanoAuxiliaryData' 接口'CardanoAuxiliaryData' 中新增了 'cVoteRegistrationParameters' 属性。处理辅助数据时,请确保对新属性的支持。
191-192
: 在 'CardanoSignTransaction' 中添加新属性添加了 'chunkify' 和 'tagCborSets' 属性。请确认这些属性在交易签名过程中已正确实现,并对其影响进行了充分测试。
205-205
: 添加 'cVoteRegistrationSignature' 属性在 'CardanoAuxiliaryDataSupplement' 中新增了 'cVoteRegistrationSignature' 属性。处理辅助数据补充时,请确保正确使用此属性。
packages/core/src/api/cardano/helper/certificate.ts (5)
12-12
: 导入CardanoDRep
符合预期该类型的导入用于后续函数,实现正确。
160-190
:transformDRep
函数实现正确该函数有效地验证并转换了
CardanoDRep
,逻辑清晰,简洁明了。
218-220
: 验证 'dRep' 参数的添加符合预期对
VOTE_DELEGATION
类型证书增加了dRep
参数的验证,逻辑正确。
228-228
: 正确调用transformDRep
函数对
certificate.dRep
进行转换,确保数据一致性。
238-239
: 在证书对象中正确添加 'deposit' 和 'drep' 字段返回的证书对象包括新的
deposit
和drep
字段,逻辑清晰。packages/hd-transport/src/types/messages.ts (7)
761-765
: 枚举 CardanoDRepType 定义无误枚举定义正确,命名符合规范。
968-974
: 类型 CardanoDRep 定义正确类型定义合理,属性命名一致,遵循代码规范。
983-984
: CardanoTxCertificate 类型更新正确新增的
deposit
和drep
属性定义合理,类型匹配,符合代码规范。
3894-3895
: TonSignMessage 类型更新正确新增的
ton_amount
和jetton_amount
属性定义合理,类型一致。
3908-3909
: TonSignMessage 类型扩展正确新增的
ext_ton_amount
和ext_payload
属性定义合理,类型匹配。
3923-3923
: TonSignProof 类型更新正确新增的
expire_at
属性定义合理,类型一致。
4161-4165
: MessageType 类型更新正确新增的类型映射添加正确,命名符合规范。
tonAmount: UintType; | ||
jettonAmount?: UintType; | ||
fwdFee?: UintType; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
金额字段类型更新获批!
将 tonAmount、jettonAmount 和 fwdFee 的类型从 number 改为 UintType 提高了精度。建议在注释中解释 UintType 的具体含义,以增强代码可读性。
37b0a00
to
20b0129
Compare
20b0129
to
f800200
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 12
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
📒 Files selected for processing (8)
- packages/core/src/api/cardano/CardanoSignTransaction.ts (8 hunks)
- packages/core/src/api/cardano/helper/auxiliaryData.ts (3 hunks)
- packages/core/src/api/cardano/helper/certificate.ts (4 hunks)
- packages/core/src/data/messages/messages.json (11 hunks)
- packages/core/src/types/api/cardano.ts (6 hunks)
- packages/hd-transport/scripts/protobuf-patches/index.js (1 hunks)
- packages/hd-transport/src/types/messages.ts (9 hunks)
- submodules/firmware (1 hunks)
🧰 Additional context used
🪛 Biome
packages/core/src/api/cardano/CardanoSignTransaction.ts
[error] 58-58: Change to an optional chain.
Unsafe fix: Change to an optional chain.
(lint/complexity/useOptionalChain)
🔇 Additional comments (18)
submodules/firmware (1)
1-1
: 固件子模块已更新。请验证新提交。固件子模块指向了新的提交。我们需要确保这个新提交存在且可访问。
运行以下脚本来验证新提交:
packages/core/src/data/messages/messages.json (2)
Line range hint
1892-2538
: Cardano更新增强了功能这些变更扩展了对Cardano新特性的支持,特别是Conway时代的治理机制。新的证书类型、DRep枚举和字段添加都很协调。
建议:
- 添加简洁的注释,解释新添加的类型和字段。
- 全面测试这些更改,确保与现有代码的无缝集成。
- 更新相关文档,反映这些新功能。
总体而言,这些改动提升了对Cardano最新发展的支持,值得肯定。
2531-2538
: 新字段补充了证书结构deposit和drep字段的添加与新的证书类型和DRep系统一致。这增强了CardanoTxCertificate消息的功能。
建议:验证这些新字段在其他相关消息和函数中的使用,确保整体集成正确。
packages/core/src/api/cardano/helper/auxiliaryData.ts (4)
11-12
: 类型导入正确新添加的类型
CardanoCVoteRegistrationParameters
和CardanoCVoteRegistrationDelegation
导入正确,符合代码更新需求。
78-87
: 确保可选参数的正确处理在构建返回对象时,请确保可选参数(如
format
、delegations
、votingPurpose
、paymentAddress
)在未提供时处理得当,避免出现 undefined 的情况。请确认这些参数在未提供时不会引发任何问题。
101-110
: 辅助数据转换逻辑清晰对辅助数据的转换逻辑更新准确,成功引入了新的
cVoteRegistrationParameters
处理方式。
117-126
: 兼容性处理完善在
modifyAuxiliaryDataForBackwardsCompatibility
函数中,对兼容性进行了正确的处理,确保旧版本数据的适配。packages/core/src/types/api/cardano.ts (5)
166-166
: 辅助数据更新,检查兼容性在
CardanoAuxiliaryData
接口中,添加了cVoteRegistrationParameters
。请确保在处理辅助数据时,正确处理了新添加的参数,保持与旧版本的兼容性。
191-192
: 签名交易请求添加新属性在
CardanoSignTransaction
接口中,新增了可选属性chunkify
和tagCborSets
。请确认这些属性在签名流程中的作用,并确保相关逻辑已更新。
205-205
: 更新辅助数据补充的属性名称
CardanoAuxiliaryDataSupplement
接口中的属性cVoteRegistrationSignature
已更新。请确保在使用该属性时,代码中的引用和逻辑都已相应调整。
141-143
: 接口重命名,更新引用
CardanoGovernanceRegistrationDelegation
接口已重命名为CardanoCVoteRegistrationDelegation
。请确保代码中所有引用旧接口的地方都已更新,避免类型错误。#!/bin/bash # 查找仍然引用旧接口的地方 rg 'CardanoGovernanceRegistrationDelegation'
49-50
: 请确认新增属性已正确处理在
CardanoCertificate
接口中,添加了可选属性deposit
和dRep
。请确保在处理证书时,这些属性被正确考虑,以避免潜在的问题。✅ Verification successful
新增属性处理正确
所有使用
CardanoCertificate
的地方已正确处理新增的deposit
和dRep
属性,未发现潜在问题。🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 检查所有使用 CardanoCertificate 的地方,确保处理了新属性 rg --type ts 'CardanoCertificate' -A 5Length of output: 368
Script:
#!/bin/bash # 检查所有使用 CardanoCertificate 的地方,确保处理了新增的 deposit 和 dRep 属性 rg --type ts 'CardanoCertificate' -A 10Length of output: 10372
packages/core/src/api/cardano/CardanoSignTransaction.ts (2)
224-229
: 确认是否需要为 model_mini 定义固件版本范围在
supportConwayVersionRange
方法中,仅定义了model_touch
的固件版本范围,未包含model_mini
。请确认model_mini
是否需要支持 Conway 功能,若需要,请补充相应的固件版本范围。
230-249
: 检查未定义版本范围时的逻辑处理在
checkSupportConway
方法中,如果versionRange
未定义,函数将直接返回。这意味着可能会跳过某些设备的固件版本检查。请确认这种处理方式是否符合预期,或者是否需要对所有设备进行固件版本验证。packages/hd-transport/src/types/messages.ts (4)
984-984
:deposit
属性类型应与其他金额类型一致在
CardanoTxCertificate
类型中,新增的deposit
属性类型为UintType
,这与项目中其他金额类型一致,符合最佳实践。
776-776
: 🛠️ Refactor suggestion统一枚举命名风格:
CVote
在
CardanoTxAuxiliaryDataSupplementType
枚举中,CVOTE_REGISTRATION_SIGNATURE
的命名方式与其他地方的CVote
前缀不一致。为了保持代码一致性,建议将其重命名为CVote_REGISTRATION_SIGNATURE
。应用以下修改:
- CVOTE_REGISTRATION_SIGNATURE = 1, + CVote_REGISTRATION_SIGNATURE = 1,Likely invalid or redundant comment.
1015-1015
: 🛠️ Refactor suggestion命名一致性:
cvote_registration_parameters
在
CardanoTxAuxiliaryData
类型中,cvote_registration_parameters
属性的命名与其他地方的CVote
前缀大小写不一致。建议统一大小写,确保命名风格一致。应用以下修改:
- cvote_registration_parameters?: CardanoCVoteRegistrationParametersType; + cVote_registration_parameters?: CardanoCVoteRegistrationParametersType;或
- cvote_registration_parameters?: CardanoCVoteRegistrationParametersType; + CVote_registration_parameters?: CardanoCVoteRegistrationParametersType;Likely invalid or redundant comment.
995-998
:⚠️ Potential issue
weight
属性类型应为UintType
在
CardanoCVoteRegistrationDelegation
类型中,weight
属性目前为number
类型。为与其他数值类型保持一致,建议将其修改为UintType
。应用以下修改:
- weight: number; + weight: UintType;Likely invalid or redundant comment.
@@ -127,6 +127,7 @@ const TYPE_PATCH = { | |||
'CardanoPoolParametersType.cost': UINT_TYPE, | |||
'CardanoPoolParametersType.margin_numerator': UINT_TYPE, | |||
'CardanoPoolParametersType.margin_denominator': UINT_TYPE, | |||
'CardanoTxCertificate.deposit': UINT_TYPE, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
新增 Cardano 交易证书存款字段
新增的 CardanoTxCertificate.deposit
字段使用 UINT_TYPE
类型很合适。这与其他 Cardano 相关字段保持一致。
建议:考虑在nearby添加简短注释,解释此字段的用途。这将提高代码可读性。
"STAKE_POOL_REGISTRATION": 3, | ||
"STAKE_REGISTRATION_CONWAY": 7, | ||
"STAKE_DEREGISTRATION_CONWAY": 8, | ||
"VOTE_DELEGATION": 9 | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
新证书类型看起来不错
新增的Cardano证书类型反映了Conway时代的变化。命名一致,值正确递增。
建议:考虑为这些新类型添加简短注释,解释它们的用途。
"CardanoDRepType": { | ||
"values": { | ||
"KEY_HASH": 0, | ||
"SCRIPT_HASH": 1, | ||
"ABSTAIN": 2, | ||
"NO_CONFIDENCE": 3 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
DRep类型是个好主意
新的CardanoDRepType枚举很好地捕捉了Cardano的委托代表系统。命名清晰,遵循惯例。
建议:在枚举前添加一行注释,简要解释DRep的概念。
const { paymentAddressParameters } = cVoteRegistrationParameters; | ||
validateAddressParameters(paymentAddressParameters); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
检查 'paymentAddressParameters' 是否为 undefined
在调用 validateAddressParameters(paymentAddressParameters)
之前,应该检查 paymentAddressParameters
是否为 undefined,以防止可能的错误。
建议修改如下:
const { paymentAddressParameters } = cVoteRegistrationParameters;
+ if (paymentAddressParameters) {
validateAddressParameters(paymentAddressParameters);
+ }
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
const { paymentAddressParameters } = cVoteRegistrationParameters; | |
validateAddressParameters(paymentAddressParameters); | |
const { paymentAddressParameters } = cVoteRegistrationParameters; | |
if (paymentAddressParameters) { | |
validateAddressParameters(paymentAddressParameters); | |
} |
if (cVoteRegistrationParameters.votingPublicKey) { | ||
console.warn('Please use votePublicKey instead of votingPublicKey.'); | ||
// @ts-expect-error | ||
cVoteRegistrationParameters.votePublicKey = cVoteRegistrationParameters.votingPublicKey; | ||
} | ||
// @ts-expect-error | ||
if (cVoteRegistrationParameters.rewardAddressParameters) { | ||
console.warn('Please use paymentAddressParameters instead of rewardAddressParameters.'); | ||
cVoteRegistrationParameters.paymentAddressParameters = | ||
// @ts-expect-error | ||
cVoteRegistrationParameters.rewardAddressParameters; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
避免修改函数参数
同样地,在 transformCvoteRegistrationParameters
函数中,直接修改了传入的 cVoteRegistrationParameters
对象。建议使用新的对象来处理,避免对原始参数的修改。
建议修改如下:
let { votePublicKey, paymentAddressParameters } = cVoteRegistrationParameters;
if (cVoteRegistrationParameters.votingPublicKey) {
console.warn('Please use votePublicKey instead of votingPublicKey.');
- cVoteRegistrationParameters.votePublicKey = cVoteRegistrationParameters.votingPublicKey;
+ votePublicKey = cVoteRegistrationParameters.votingPublicKey;
}
if (cVoteRegistrationParameters.rewardAddressParameters) {
console.warn('Please use paymentAddressParameters instead of rewardAddressParameters.');
- cVoteRegistrationParameters.paymentAddressParameters = cVoteRegistrationParameters.rewardAddressParameters;
+ paymentAddressParameters = cVoteRegistrationParameters.rewardAddressParameters;
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
if (cVoteRegistrationParameters.votingPublicKey) { | |
console.warn('Please use votePublicKey instead of votingPublicKey.'); | |
// @ts-expect-error | |
cVoteRegistrationParameters.votePublicKey = cVoteRegistrationParameters.votingPublicKey; | |
} | |
// @ts-expect-error | |
if (cVoteRegistrationParameters.rewardAddressParameters) { | |
console.warn('Please use paymentAddressParameters instead of rewardAddressParameters.'); | |
cVoteRegistrationParameters.paymentAddressParameters = | |
// @ts-expect-error | |
cVoteRegistrationParameters.rewardAddressParameters; | |
} | |
let { votePublicKey, paymentAddressParameters } = cVoteRegistrationParameters; | |
if (cVoteRegistrationParameters.votingPublicKey) { | |
console.warn('Please use votePublicKey instead of votingPublicKey.'); | |
votePublicKey = cVoteRegistrationParameters.votingPublicKey; | |
} | |
if (cVoteRegistrationParameters.rewardAddressParameters) { | |
console.warn('Please use paymentAddressParameters instead of rewardAddressParameters.'); | |
paymentAddressParameters = cVoteRegistrationParameters.rewardAddressParameters; | |
} |
const transformDRep = (dRep: CardanoDRep | undefined): PROTO.CardanoDRep | undefined => { | ||
if (!dRep) { | ||
return undefined; | ||
} | ||
|
||
validateParams(dRep, [ | ||
{ name: 'type', type: 'number', required: true }, | ||
{ name: 'keyHash', type: 'string' }, | ||
{ name: 'scriptHash', type: 'string' }, | ||
]); | ||
|
||
if (dRep.type === PROTO.CardanoDRepType.KEY_HASH && !dRep.keyHash) { | ||
throw ERRORS.TypedError( | ||
HardwareErrorCode.CallMethodInvalidParameter, | ||
'key_hash must be supplied for key_hash type' | ||
); | ||
} | ||
|
||
if (dRep.type === PROTO.CardanoDRepType.SCRIPT_HASH && !dRep.scriptHash) { | ||
throw ERRORS.TypedError( | ||
HardwareErrorCode.CallMethodInvalidParameter, | ||
'script_hash must be supplied for script_hash type' | ||
); | ||
} | ||
return { | ||
type: dRep.type, | ||
key_hash: dRep.keyHash, | ||
script_hash: dRep.scriptHash, | ||
}; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
建议处理未知的 dRep.type
当前的 transformDRep
函数只处理了 KEY_HASH
和 SCRIPT_HASH
类型。如果出现未知的 dRep.type
,函数可能返回未定义的 key_hash
和 script_hash
,可能导致意外行为。建议添加错误处理,以捕获未知的 dRep.type
,提高代码的健壮性。
可以考虑以下修改:
if (dRep.type === PROTO.CardanoDRepType.SCRIPT_HASH && !dRep.scriptHash) {
throw ERRORS.TypedError(
HardwareErrorCode.CallMethodInvalidParameter,
'script_hash must be supplied for script_hash type'
);
+ } else if (dRep.type !== PROTO.CardanoDRepType.KEY_HASH && dRep.type !== PROTO.CardanoDRepType.SCRIPT_HASH) {
+ throw ERRORS.TypedError(
+ HardwareErrorCode.CallMethodInvalidParameter,
+ `Unsupported dRep type: ${dRep.type}`
+ );
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
const transformDRep = (dRep: CardanoDRep | undefined): PROTO.CardanoDRep | undefined => { | |
if (!dRep) { | |
return undefined; | |
} | |
validateParams(dRep, [ | |
{ name: 'type', type: 'number', required: true }, | |
{ name: 'keyHash', type: 'string' }, | |
{ name: 'scriptHash', type: 'string' }, | |
]); | |
if (dRep.type === PROTO.CardanoDRepType.KEY_HASH && !dRep.keyHash) { | |
throw ERRORS.TypedError( | |
HardwareErrorCode.CallMethodInvalidParameter, | |
'key_hash must be supplied for key_hash type' | |
); | |
} | |
if (dRep.type === PROTO.CardanoDRepType.SCRIPT_HASH && !dRep.scriptHash) { | |
throw ERRORS.TypedError( | |
HardwareErrorCode.CallMethodInvalidParameter, | |
'script_hash must be supplied for script_hash type' | |
); | |
} | |
return { | |
type: dRep.type, | |
key_hash: dRep.keyHash, | |
script_hash: dRep.scriptHash, | |
}; | |
}; | |
const transformDRep = (dRep: CardanoDRep | undefined): PROTO.CardanoDRep | undefined => { | |
if (!dRep) { | |
return undefined; | |
} | |
validateParams(dRep, [ | |
{ name: 'type', type: 'number', required: true }, | |
{ name: 'keyHash', type: 'string' }, | |
{ name: 'scriptHash', type: 'string' }, | |
]); | |
if (dRep.type === PROTO.CardanoDRepType.KEY_HASH && !dRep.keyHash) { | |
throw ERRORS.TypedError( | |
HardwareErrorCode.CallMethodInvalidParameter, | |
'key_hash must be supplied for key_hash type' | |
); | |
} | |
if (dRep.type === PROTO.CardanoDRepType.SCRIPT_HASH && !dRep.scriptHash) { | |
throw ERRORS.TypedError( | |
HardwareErrorCode.CallMethodInvalidParameter, | |
'script_hash must be supplied for script_hash type' | |
); | |
} else if (dRep.type !== PROTO.CardanoDRepType.KEY_HASH && dRep.type !== PROTO.CardanoDRepType.SCRIPT_HASH) { | |
throw ERRORS.TypedError( | |
HardwareErrorCode.CallMethodInvalidParameter, | |
`Unsupported dRep type: ${dRep.type}` | |
); | |
} | |
return { | |
type: dRep.type, | |
key_hash: dRep.keyHash, | |
script_hash: dRep.scriptHash, | |
}; | |
}; |
} | ||
|
||
export enum CardanoGovernanceRegistrationFormat { | ||
export enum CardanoCVoteRegistrationFormat { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
命名风格一致性:CardanoCVoteRegistrationFormat
类型命名中,CVote
前缀应保持大写格式,以保持一致性。请确认命名是否符合项目的命名规范。
export type CardanoCVoteRegistrationParametersType = { | ||
vote_public_key?: string; | ||
staking_path: number[]; | ||
reward_address_parameters: CardanoAddressParametersType; | ||
payment_address_parameters?: CardanoAddressParametersType; | ||
nonce: number; | ||
format?: CardanoGovernanceRegistrationFormat; | ||
delegations: CardanoGovernanceRegistrationDelegation[]; | ||
format?: CardanoCVoteRegistrationFormat; | ||
delegations: CardanoCVoteRegistrationDelegation[]; | ||
voting_purpose?: number; | ||
payment_address?: string; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
属性命名风格不一致
在 CardanoCVoteRegistrationParametersType
类型中,部分属性使用了下划线命名(如 vote_public_key
),而其他属性使用了驼峰式命名(如 staking_path
)。建议统一命名风格,保持代码一致性。
可选择以下一种命名风格:
-
全部使用驼峰式命名:
- vote_public_key?: string; + votePublicKey?: string;
-
全部使用下划线命名:
- staking_path: number[]; + staking_path: number[];
Committable suggestion was skipped due to low confidence.
STAKE_REGISTRATION_CONWAY = 7, | ||
STAKE_DEREGISTRATION_CONWAY = 8, | ||
VOTE_DELEGATION = 9, | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
注意枚举值编号的连续性
在 CardanoCertificateType
枚举中,新增的枚举值从 7 开始(STAKE_REGISTRATION_CONWAY = 7
),之前的值最高为 3。为了保持编号的连续性和避免潜在的混淆,建议调整枚举值的编号,或者添加注释解释跳跃的原因。
应用以下修改:
+ // 值 4 至 6 是否有特殊含义,若无,建议重新编号
STAKE_REGISTRATION_CONWAY = 4,
STAKE_DEREGISTRATION_CONWAY = 5,
VOTE_DELEGATION = 6,
Committable suggestion was skipped due to low confidence.
@@ -831,6 +841,7 @@ | |||
network_id: number; | |||
address_parameters: CardanoAddressParametersType; | |||
derivation_type: CardanoDerivationType; | |||
chunkify?: boolean; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
chunkify
属性未在代码中处理
在 CardanoGetAddress
类型中新增了 chunkify
属性,但目前代码库中未发现对此属性的处理逻辑。请确保在相关功能中正确使用和处理 chunkify
属性,以避免潜在的问题。
🔗 Analysis chain
检查新增的可选属性 chunkify
在 CardanoGetAddress
类型中,新增了可选属性 chunkify
。请确保在代码的其他部分正确处理了该属性,避免潜在的错误。
运行以下脚本验证 chunkify
属性的使用情况:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# 描述:查找代码库中 `CardanoGetAddress` 类型的使用情况,确认 `chunkify` 属性的处理
# 测试:搜索所有使用了 `CardanoGetAddress` 的文件,期望看到对 `chunkify` 属性的处理
rg --type js --type ts 'CardanoGetAddress' -A 5
Length of output: 6384
Script:
#!/bin/bash
# 描述:查找代码库中对 `CardanoGetAddress` 类型的 `chunkify` 属性的处理情况
# 搜索所有包含 `CardanoGetAddress` 的文件,并在附近查找 `chunkify` 属性的使用
rg --type js --type ts 'CardanoGetAddress' -A 10 | rg 'chunkify'
Length of output: 128
Pull request was converted to draft
Summary by CodeRabbit
新特性
文档
类型更新