有签名和没有签名的交易有什么区别?

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 发送到区块链端点时,没有恶意节点可以窃取您的所有资金。