Ký giao dịch bằng (các) khóa riêng tư của người gửi giao dịch trong keyring và thêm chữ ký vào đối tượng giao dịch với trường signatures.
Đối với giao dịch [Cập nhật tài khoản](basic.md#tài khoảnupdate), sử dụng [roleAccountUpdateKey](../../../../../klaytn/design/tài khoảns.md#roles), nếu không, sử dụng [roleTransactionKey](../../../../../klaytn/design/tài khoảns.md#roles) trong RoleBasedKeyring. Nếu người dùng chưa xác định index, transaction.sign sẽ ký giao dịch bằng cách sử dụng tất cả các khóa riêng tư được sử dụng cho vai trò đó. Nếu đã xác định index, transaction.sign sẽ ký giao dịch chỉ bằng một khóa riêng tư tại chỉ mục đã cho.
Tham số
Giá trị trả về
Promise trả về object: Giao dịch đã ký.
Ví dụ
// Ví dụ này sử dụng giao dịch ValueTransfer.>consttransaction=caver.transaction.valueTransfer.create({ from:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', value:1, gas:30000,})>constcustomHasher= () => { ... }// Ký một giao dịch bằng roleBasedKeyring sử dụng hai khóa riêng tư cho roleTransactionKey>transaction.sign(roleBasedKeyring).then(console.log)ValueTransfer { _type:'TxTypeValueTransfer', _from:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x4e43', _r:'0xd78a2...', _s:'0x379e9...' }, SignatureData { _v:'0x4e43', _r:'0x70a58...', _s:'0x2ab28...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}// Ký một giao dịch bằng roleBasedKeyring sử dụng hai khóa riêng tư cho roleTransactionKey và chỉ mục>transaction.sign(roleBasedKeyring,1).then(console.log)ValueTransfer { _type:'TxTypeValueTransfer', _from:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x4e43', _r:'0x70a58...', _s:'0x2ab28...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}// Ký một giao dịch bằng roleBasedKeyring sử dụng hai khóa riêng tư cho roleTransactionKey và hàm băm>transaction.sign(roleBasedKeyring, customHasher).then(console.log)ValueTransfer { _type:'TxTypeValueTransfer', _from:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x4e44', _r:'0x7a8b6...', _s:'0x17139...' }, SignatureData { _v:'0x4e43', _r:'0x7f978...', _s:'0x1a532...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}// Ký một giao dịch bằng roleBasedKeyring sử dụng hai khóa riêng tư cho roleTransactionKey, chỉ mục và hàm băm>transaction.sign(roleBasedKeyring,1, customHasher).then(console.log)ValueTransfer { _type:'TxTypeValueTransfer', _from:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x4e43', _r:'0x7f978...', _s:'0x1a532...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}
Ký giao dịch với vai trò là fee payer giao dịch và thêm feePayerSignatures vào đối tượng giao dịch với (các) khóa riêng tư trong keyring.
Để ký giao dịch với vai trò là người trả phí, hãy sử dụng [roleFeePayerKey](../../../../../klaytn/design/tài khoảns.md#roles) trong keyring. Nếu người dùng chưa xác định index, transaction.signAsFeePayer sẽ ký giao dịch bằng cách sử dụng tất cả các khóa riêng tư được sử dụng cho vai trò đó. Nếu đã xác định index, transaction.signAsFeePayer sẽ ký giao dịch chỉ bằng một khóa riêng tư tại chỉ mục đã cho.
Nếu không xác định transaction.feePayer, địa chỉ của keyring đã cho được đặt thành transaction.feePayer.
Nếu keyring được sử dụng để ký giao dịch được thêm vào caver.wallet, bạn có thể dùng caver.wallet.signAsFeePayer.
LƯU Ý Hàm này chỉ hoạt động cho các giao dịch "có phí ủy thác" hoặc giao dịch "có phí ủy thác theo tỷ lệ".
Tham số
Giá trị trả về
Promise trả về object: Giao dịch đã ký.
Ví dụ
// Ví dụ này sử dụng giao dịch FeeDelegatedValueTransfer.>consttransaction=caver.transaction.feeDelegatedValueTransfer.create({ from:'0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c', to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', value:1, gas:30000,})>constcustomHasher= () => { ... }// Ký một giao dịch bằng địa chỉ RoleBasedKeyring sử dụng hai khóa riêng tư cho roleFeePayerKey>transaction.signAsFeePayer(roleBasedKeyring).then(console.log)FeeDelegatedValueTransfer { _type:'TxTypeFeeDelegatedValueTransfer', _from:'0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x01', _r:'0x', _s:'0x' } ], _feePayer:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _feePayerSignatures: [ SignatureData { _v:'0x4e44', _r:'0x7010e...', _s:'0x65d6b...' }, SignatureData { _v:'0x4e43', _r:'0x96ef2...', _s:'0x77f34...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}// Ký một giao dịch bằng địa chỉ RoleBasedKeyring sử dụng hai khóa riêng tư cho roleFeePayerKey và chỉ mục>transaction.signAsFeePayer(roleBasedKeyring,1).then(console.log)FeeDelegatedValueTransfer { _type:'TxTypeFeeDelegatedValueTransfer', _from:'0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x01', _r:'0x', _s:'0x' } ], _feePayer:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _feePayerSignatures: [ SignatureData { _v:'0x4e43', _r:'0x96ef2...', _s:'0x77f34...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}// Ký một giao dịch bằng địa chỉ RoleBasedKeyring sử dụng hai khóa riêng tư cho roleFeePayerKey và hàm băm>transaction.signAsFeePayer(roleBasedKeyring, customHasher).then(console.log)FeeDelegatedValueTransfer { _type:'TxTypeFeeDelegatedValueTransfer', _from:'0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x01', _r:'0x', _s:'0x' } ], _feePayer:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _feePayerSignatures: [ SignatureData { _v:'0x4e43', _r:'0xe48bf...', _s:'0x1cf36...' }, SignatureData { _v:'0x4e43', _r:'0x82976...', _s:'0x3c5e0...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}// Ký một giao dịch bằng địa chỉ RoleBasedKeyring sử dụng hai khóa riêng tư cho roleFeePayerKey, chỉ mục và hàm băm>transaction.signAsFeePayer(roleBasedKeyring,1, customHasher).then(console.log)FeeDelegatedValueTransfer { _type:'TxTypeFeeDelegatedValueTransfer', _from:'0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c', _gas:'0x7530', _signatures: [ SignatureData { _v:'0x01', _r:'0x', _s:'0x' } ], _feePayer:'0xe7e9184c125020af5d34eab7848bab799a1dcba9', _feePayerSignatures: [ SignatureData { _v:'0x4e43', _r:'0x82976...', _s:'0x3c5e0...' } ], _to:'0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7', _value:'0x1', _chainId:'0x2710', _gasPrice:'0x5d21dba00', _nonce:'0x0'}
Thu thập chữ ký trong mỗi chuỗi giao dịch được mã hóa RLP trong mảng cho trước, kết hợp chúng với đối tượng giao dịch và trả về một chuỗi giao dịch được mã hóa RLP bao gồm tất cả các chữ ký. Lưu ý rằng không nhất thiết phải ký trước đối tượng giao dịch. Nếu giao dịch là giao dịch "có phí ủy thác" hoặc "có phí ủy thác theo tỷ lệ", feePayerSignatures cũng được hợp nhất và bao gồm trong chuỗi giao dịch được mã hóa RLP đầu ra.
senderTxHash là hàm băm của giao dịch trừ địa chỉ và chữ ký của người trả phí, do đó transactionHash và senderTxHash sẽ giống nhau đối với các giao dịch cơ bản.
Trả về một chuỗi giao dịch được mã hóa RLP để tạo chữ ký của người gửi giao dịch. Lưu ý rằng chuỗi giao dịch được mã hóa RLP trả về không được thêm vào chữ ký và thay vào đó được sử dụng để tạo chữ ký này.
Để biết thông tin về cách tạo chuỗi giao dịch được mã hóa RLP để tạo chữ ký của người gửi giao dịch cho mỗi loại giao dịch, hãy xem Thiết kế Klaytn - Giao dịch.
Trả về một chuỗi giao dịch được mã hóa RLP để tạo chữ ký của người trả phí. Lưu ý rằng chuỗi giao dịch được mã hóa RLP trả về không được thêm vào chữ ký và thay vào đó được sử dụng để tạo chữ ký này.
Để biết thông tin về cách tạo chuỗi giao dịch được mã hóa RLP để tạo chữ ký của người trả phí cho mỗi loại giao dịch, hãy xem Thiết kế Klaytn - Giao dịch.
LƯU Ý Hàm này chỉ hoạt động cho các giao dịch "có phí ủy thác" hoặc giao dịch "có phí ủy thác theo tỷ lệ".
Nếu gasPrice, nonce hoặc chainId của giao dịch không được xác định, phương pháp này sẽ yêu cầu các giá trị mặc định cho các biến tùy chọn này và thiết lập chúng bằng cách gửi lệnh gọi RPC JSON đến nút Klaytn đã kết nối.
Trả về giá gas đề xuất. Hàm này được sử dụng để thiết lập trường giá gas trong fillTransaction.
Trước khi Magma hard fork diễn ra, suggestGasPrice trả về đơn giá của mạng. Sau đợt Magma hard fork, suggestGasPrice trả về baseFee * 2 được khuyến nghị sử dụng như là giá gas.
LƯU Ýtransaction.suggestGasPrice được hỗ trợ kể từ phiên bản caver-js v1.9.0.
Giá trị trả về
Promise trả về string: Giá gas đề xuất trong chuỗi thập lục phân.
Một đối tượng Giao dịch. Để biết thông tin chi tiết về mỗi giao dịch, vui lòng tham khảo mục Giao dịch.
transactionHash
chuỗi
Chuỗi hàm băm giao dịch để truy vấn từ Klaytn.
đối tượng
Một đối tượng Giao dịch. Để biết thông tin chi tiết về mỗi giao dịch, vui lòng tham khảo mục Giao dịch.
rawTx
chuỗi
Chuỗi giao dịch được mã hóa RLP để khôi phục khóa công khai từ signatures.
Mảng
Mảng chứa khóa công khai được khôi phục từ signatures.
rawTx
chuỗi
Chuỗi giao dịch được mã hóa RLP để khôi phục khóa công khai từ feePayerSignatures. Để khôi phục khóa công khai của người trả phí, giao dịch phải là giao dịch có phí ủy thác với trường feePayerSignatures bên trong.
Mảng
Mảng chứa khóa công khai được khôi phục từ feePayerSignatures.
keyring
đối tượng \
chuỗi
chỉ số
number
(tùy chọn) Chỉ mục khóa riêng tư bạn muốn sử dụng. Chỉ mục phải nhỏ hơn độ dài của mảng các khóa riêng tư được định rõ cho mỗi vai trò. Nếu không định rõ chỉ mục, phương pháp này sẽ sử dụng tất cả các khóa riêng tư.
hasher
Hàm
(tùy chọn) Hàm băm để tính giá trị băm của giao dịch.
đối tượng
Một đối tượng Giao dịch đã ký. Chữ ký được thêm vào trường transaction.signatures.
keyring
đối tượng \
chuỗi
chỉ số
number
(tùy chọn) Chỉ mục khóa riêng tư bạn muốn sử dụng. Chỉ mục phải nhỏ hơn độ dài của mảng các khóa riêng tư được định rõ cho mỗi vai trò. Nếu không định rõ chỉ mục, phương pháp này sẽ sử dụng tất cả các khóa riêng tư.
hasher
Hàm
(tùy chọn) Hàm băm để tính giá trị băm của giao dịch.
đối tượng
Một đối tượng Giao dịch đã ký. Chữ ký được thêm vào trường transaction.feePayerSignatures.
chữ ký
đối tượng \
Mảng
feePayerSignatures
đối tượng \
Mảng
rlpEncodedTxs
Mảng
Mảng chứa các chuỗi giao dịch đã ký được mã hóa RLP.
chuỗi
Một chuỗi giao dịch được mã hóa RLP bao gồm tất cả signatures (và feePayerSignatures nếu giao dịch là giao dịch "có phí ủy thác" hoặc "có phí ủy thác theo tỷ lệ").
chuỗi
Chuỗi giao dịch được mã hóa RLP.
chuỗi
Chuỗi giao dịch được mã hóa RLP.
chuỗi
Một hàm băm giao dịch.
chuỗi
SenderTxHash.
chuỗi
Chuỗi giao dịch được mã hóa RLP không có chữ ký đi kèm.
chuỗi
Chuỗi giao dịch được mã hóa RLP không có chữ ký đi kèm.
Mảng
Mảng chứa khóa công khai được khôi phục từ signatures.
Mảng
Mảng chứa khóa công khai được khôi phục từ feePayerSignatures.