有签名和没有签名的交易有什么区别?
What is the difference between a transaction with and without signatures?
当我向 peer/transactions
发送交易时,我可以发送有签名和没有签名的交易。两个交易都被接受。有什么区别。
示例;使用asch-js
创建一个新链/dapp
情况 1:使用签名(和 transactionid
):
function createDApp(options, secret, secondSecret) {
var keys = crypto.getKeys(secret);
var transaction = {
secret: secret,
type: 200,
amount: 0,
fee: constants.fees.dapp,
recipientId: null,
senderId: crypto.getAddress(keys.publicKey),
timestamp: slots.getTime() - globalOptions.get('clientDriftSeconds'),
args: [options.name, options.description, options.link, options.icon, options.delegates, options.unlockDelegates],
signatures: []
};
transaction.signatures.push(crypto.sign(transaction, keys));
if (secondSecret) {
var secondKeys = crypto.getKeys(secondSecret);
transaction.signatures.push(crypto.secondSign(transaction, secondKeys));
}
transaction.id = crypto.getId(transaction);
return transaction;
}
情况二:无签名
function createDApp(options, secret, secondSecret) {
var keys = crypto.getKeys(secret);
var transaction = {
secret: secret,
type: 200,
amount: 0,
fee: constants.fees.dapp,
recipientId: null,
senderId: crypto.getAddress(keys.publicKey),
timestamp: slots.getTime() - globalOptions.get('clientDriftSeconds'),
args: [options.name, options.description, options.link, options.icon, options.delegates, options.unlockDelegates],
signatures: []
};
return transaction;
}
两个交易都被接受(并创建一个新链)。那么有什么区别,最佳做法是什么?
据我了解,api/transactions
端点主要用于 unsigned 交易(如您的第二个示例)。因此您需要提供 secret
属性。否则 ASCH 区块链无法签署您未签署的交易。
在您的第一个示例中,您自己 签署 交易,因此您不需要将 secret
属性 发送到 peer/transactions
端点。
从安全端点来看,最好在本地签署您的交易。因此,当您将 secret
发送到区块链端点时,没有恶意节点可以窃取您的所有资金。
当我向 peer/transactions
发送交易时,我可以发送有签名和没有签名的交易。两个交易都被接受。有什么区别。
示例;使用asch-js
创建一个新链/dapp情况 1:使用签名(和 transactionid
):
function createDApp(options, secret, secondSecret) {
var keys = crypto.getKeys(secret);
var transaction = {
secret: secret,
type: 200,
amount: 0,
fee: constants.fees.dapp,
recipientId: null,
senderId: crypto.getAddress(keys.publicKey),
timestamp: slots.getTime() - globalOptions.get('clientDriftSeconds'),
args: [options.name, options.description, options.link, options.icon, options.delegates, options.unlockDelegates],
signatures: []
};
transaction.signatures.push(crypto.sign(transaction, keys));
if (secondSecret) {
var secondKeys = crypto.getKeys(secondSecret);
transaction.signatures.push(crypto.secondSign(transaction, secondKeys));
}
transaction.id = crypto.getId(transaction);
return transaction;
}
情况二:无签名
function createDApp(options, secret, secondSecret) {
var keys = crypto.getKeys(secret);
var transaction = {
secret: secret,
type: 200,
amount: 0,
fee: constants.fees.dapp,
recipientId: null,
senderId: crypto.getAddress(keys.publicKey),
timestamp: slots.getTime() - globalOptions.get('clientDriftSeconds'),
args: [options.name, options.description, options.link, options.icon, options.delegates, options.unlockDelegates],
signatures: []
};
return transaction;
}
两个交易都被接受(并创建一个新链)。那么有什么区别,最佳做法是什么?
据我了解,api/transactions
端点主要用于 unsigned 交易(如您的第二个示例)。因此您需要提供 secret
属性。否则 ASCH 区块链无法签署您未签署的交易。
在您的第一个示例中,您自己 签署 交易,因此您不需要将 secret
属性 发送到 peer/transactions
端点。
从安全端点来看,最好在本地签署您的交易。因此,当您将 secret
发送到区块链端点时,没有恶意节点可以窃取您的所有资金。