#1143 [Binance] Fix timelock unlock signature error

Merged hewigovens hewigovens
Coverage Reach
src/interface/TWEthereumAbiFunction.cpp src/interface/TWStoredKey.cpp src/interface/TWBitcoinScript.cpp src/interface/TWAnyAddress.cpp src/interface/TWHash.cpp src/interface/TWData.cpp src/interface/TWPrivateKey.cpp src/interface/TWEthereumAbiValue.cpp src/interface/TWHDWallet.cpp src/interface/TWPublicKey.cpp src/interface/TWCoinType.cpp src/interface/TWBitcoinAddress.cpp src/interface/TWAnySigner.cpp src/interface/TWString+Hex.cpp src/interface/TWString.cpp src/interface/TWSegwitAddress.cpp src/interface/TWEthereumAbi.cpp src/interface/TWBase58.cpp src/interface/TWAES.cpp src/interface/TWGroestlcoinAddress.cpp src/interface/TWAccount.cpp src/interface/TWFIOAccount.cpp src/interface/TWNEARAccount.cpp src/interface/TWHDVersion.cpp src/interface/TWBitcoin.cpp src/Ethereum/ABI/ParamFactory.cpp src/Ethereum/ABI/ParamNumber.h src/Ethereum/ABI/Parameters.cpp src/Ethereum/ABI/Bytes.cpp src/Ethereum/ABI/ValueEncoder.cpp src/Ethereum/ABI/Bytes.h src/Ethereum/ABI/Array.cpp src/Ethereum/ABI/ParamNumber.cpp src/Ethereum/ABI/Function.cpp src/Ethereum/ABI/Function.h src/Ethereum/ABI/Parameters.h src/Ethereum/ABI/ParamAddress.h src/Ethereum/ABI/Array.h src/Ethereum/ABI/ValueDecoder.cpp src/Ethereum/ABI/ParamBase.h src/Ethereum/ABI/ValueEncoder.h src/Ethereum/RLP.cpp src/Ethereum/Signer.cpp src/Ethereum/ContractCall.cpp src/Ethereum/RLP.h src/Ethereum/AddressChecksum.cpp src/Ethereum/Address.cpp src/Ethereum/Entry.cpp src/Ethereum/Transaction.h src/Ethereum/Entry.h src/Ethereum/Address.h src/Ethereum/Signer.h src/Bitcoin/Script.cpp src/Bitcoin/TransactionSigner.cpp src/Bitcoin/Transaction.cpp src/Bitcoin/TransactionBuilder.cpp src/Bitcoin/UnspentSelector.cpp src/Bitcoin/SegwitAddress.cpp src/Bitcoin/CashAddress.cpp src/Bitcoin/Signer.cpp src/Bitcoin/Entry.cpp src/Bitcoin/TransactionPlan.h src/Bitcoin/FeeCalculator.cpp src/Bitcoin/Script.h src/Bitcoin/TransactionBuilder.h src/Bitcoin/TransactionInput.cpp src/Bitcoin/TransactionSigner.h src/Bitcoin/Transaction.h src/Bitcoin/SegwitAddress.h src/Bitcoin/SigHashType.h src/Bitcoin/UnspentSelector.h src/Bitcoin/OutPoint.h src/Bitcoin/Address.h src/Bitcoin/TransactionInput.h src/Bitcoin/OutPoint.cpp src/Bitcoin/TransactionOutput.cpp src/Bitcoin/CashAddress.h src/Bitcoin/Entry.h src/Bitcoin/FeeCalculator.h src/Bitcoin/OpCodes.h src/Bitcoin/TransactionOutput.h src/FIO/TransactionBuilder.cpp src/FIO/Encryption.cpp src/FIO/Action.cpp src/FIO/Address.cpp src/FIO/Action.h src/FIO/NewFundsRequest.cpp src/FIO/Actor.cpp src/FIO/Signer.cpp src/FIO/Transaction.cpp src/FIO/Entry.cpp src/FIO/Transaction.h src/FIO/Entry.h src/FIO/NewFundsRequest.h src/FIO/Address.h src/FIO/TransactionBuilder.h src/Harmony/Signer.cpp src/Harmony/Staking.h src/Harmony/Transaction.h src/Harmony/Address.h src/Harmony/Entry.cpp src/Harmony/Entry.h src/Harmony/Address.cpp src/Harmony/Signer.h src/Ontology/ParamsBuilder.cpp src/Ontology/Address.cpp src/Ontology/OngTxBuilder.cpp src/Ontology/Signer.cpp src/Ontology/Transaction.cpp src/Ontology/Ong.cpp src/Ontology/OntTxBuilder.cpp src/Ontology/Ont.cpp src/Ontology/SigData.cpp src/Ontology/Transaction.h src/Ontology/Entry.cpp src/Ontology/SigData.h src/Ontology/ParamsBuilder.h src/Ontology/Ong.h src/Ontology/Ont.h src/Ontology/Asset.h src/Ontology/Entry.h src/Ontology/Signer.h src/EOS/Transaction.cpp src/EOS/Asset.cpp src/EOS/Address.cpp src/EOS/Signer.cpp src/EOS/Action.cpp src/EOS/Name.cpp src/EOS/Serialization.h src/EOS/PackedTransaction.cpp src/EOS/Prefixes.h src/EOS/Entry.cpp src/EOS/Action.h src/EOS/Transaction.h src/EOS/Signer.h src/EOS/PackedTransaction.h src/EOS/Name.h src/EOS/Address.h src/EOS/Entry.h src/EOS/Asset.h src/TON/Cell.cpp src/TON/Address.cpp src/TON/Signer.cpp src/TON/Contract.cpp src/TON/Cell.h src/TON/Address.h src/TON/Entry.cpp src/TON/Entry.h src/NEO/Signer.cpp src/NEO/Transaction.cpp src/NEO/ReadData.cpp src/NEO/TransactionAttribute.h src/NEO/Address.cpp src/NEO/Serializable.h src/NEO/TransactionOutput.h src/NEO/CoinReference.h src/NEO/Witness.h src/NEO/Script.cpp src/NEO/MinerTransaction.h src/NEO/Entry.cpp src/NEO/ReadData.h src/NEO/Transaction.h src/NEO/Address.h src/NEO/ISerializable.h src/NEO/Entry.h src/NEO/Signer.h src/Tron/Signer.cpp src/Tron/Serialization.cpp src/Tron/Address.cpp src/Tron/Entry.cpp src/Tron/Entry.h src/Tron/Address.h src/Decred/Signer.cpp src/Decred/Transaction.cpp src/Decred/Address.cpp src/Decred/TransactionBuilder.h src/Decred/Transaction.h src/Decred/TransactionInput.cpp src/Decred/Entry.cpp src/Decred/Signer.h src/Decred/OutPoint.h src/Decred/TransactionOutput.cpp src/Decred/TransactionOutput.h src/Decred/OutPoint.cpp src/Decred/TransactionInput.h src/Decred/Entry.h src/Keystore/StoredKey.cpp src/Keystore/EncryptionParameters.cpp src/Keystore/ScryptParameters.cpp src/Keystore/Account.cpp src/Keystore/PBKDF2Parameters.cpp src/Keystore/AESParameters.cpp src/Keystore/Account.h src/Keystore/EncryptionParameters.h src/Keystore/StoredKey.h src/Keystore/ScryptParameters.h src/Keystore/AESParameters.h src/Keystore/PBKDF2Parameters.h src/Solana/Transaction.h src/Solana/Signer.cpp src/Solana/Transaction.cpp src/Solana/Address.cpp src/Solana/Entry.cpp src/Solana/Address.h src/Solana/Entry.h src/Binance/Signer.cpp src/Binance/Serialization.cpp src/Binance/Address.cpp src/Binance/Entry.cpp src/Binance/Address.h src/Binance/Entry.h src/Binance/Signer.h src/Cbor.cpp src/Cardano/AddressV3.cpp src/Cardano/AddressV2.cpp src/Cardano/Entry.cpp src/Cardano/AddressV3.h src/Cardano/Entry.h src/Cardano/AddressV2.h src/Waves/Transaction.cpp src/Waves/Address.cpp src/Waves/Signer.cpp src/Waves/Entry.cpp src/Waves/BinaryCoding.h src/Waves/Transaction.h src/Waves/Entry.h src/Polkadot/Extrinsic.cpp src/Polkadot/ScaleCodec.h src/Polkadot/Extrinsic.h src/Polkadot/Signer.cpp src/Polkadot/Entry.cpp src/Polkadot/Address.h src/Polkadot/Entry.h src/Filecoin/Address.cpp src/Filecoin/Transaction.cpp src/Filecoin/Signer.cpp src/Filecoin/Address.h src/Filecoin/Transaction.h src/Filecoin/Entry.cpp src/Filecoin/Entry.h src/Tezos/Forging.cpp src/Tezos/Signer.cpp src/Tezos/Address.cpp src/Tezos/OperationList.cpp src/Tezos/BinaryCoding.cpp src/Tezos/Entry.cpp src/Tezos/Entry.h src/Tezos/OperationList.h src/Tezos/Address.h src/HDWallet.cpp src/Zcash/Transaction.cpp src/Zcash/Signer.cpp src/Zcash/TransactionBuilder.h src/Zcash/Transaction.h src/Zcash/Entry.cpp src/Zcash/TAddress.h src/Zcash/Entry.h src/NULS/Signer.cpp src/NULS/BinaryCoding.h src/NULS/Address.cpp src/NULS/Entry.cpp src/NULS/Entry.h src/NULS/Signer.h src/Coin.cpp src/Ripple/Transaction.cpp src/Ripple/XAddress.cpp src/Ripple/Signer.cpp src/Ripple/BinaryCoding.h src/Ripple/Transaction.h src/Ripple/Address.cpp src/Ripple/Entry.cpp src/Ripple/Entry.h src/PrivateKey.cpp src/Algorand/BinaryCoding.h src/Algorand/Transaction.cpp src/Algorand/Address.cpp src/Algorand/Signer.cpp src/Algorand/Transaction.h src/Algorand/Entry.cpp src/Algorand/Entry.h src/Cosmos/Serialization.cpp src/Cosmos/Signer.cpp src/Cosmos/Entry.cpp src/Cosmos/Address.h src/Cosmos/Entry.h src/Nano/Signer.cpp src/Nano/Address.cpp src/Nano/Entry.cpp src/Nano/Entry.h src/Nano/Signer.h src/Nebulas/Transaction.cpp src/Nebulas/Signer.cpp src/Nebulas/Address.cpp src/Nebulas/Transaction.h src/Nebulas/Entry.cpp src/Nebulas/Entry.h src/Nebulas/Signer.h src/Nimiq/Address.cpp src/Nimiq/Transaction.cpp src/Nimiq/Signer.cpp src/Nimiq/Entry.cpp src/Nimiq/Signer.h src/Nimiq/Transaction.h src/Nimiq/Entry.h src/Nimiq/Address.h src/IoTeX/Staking.cpp src/IoTeX/Signer.cpp src/IoTeX/Address.h src/IoTeX/Entry.cpp src/IoTeX/Signer.h src/IoTeX/Entry.h src/IoTeX/Address.cpp src/Theta/Transaction.cpp src/Theta/Signer.cpp src/Theta/Entry.cpp src/Theta/Transaction.h src/Theta/Coins.h src/Theta/Signer.h src/Theta/Entry.h src/Stellar/Signer.cpp src/Stellar/Address.cpp src/Stellar/Entry.cpp src/Stellar/Entry.h src/Stellar/Signer.h src/Aeternity/Signer.cpp src/Aeternity/Transaction.cpp src/Aeternity/Address.cpp src/Aeternity/Transaction.h src/Aeternity/Entry.cpp src/Aeternity/Identifiers.h src/Aeternity/Entry.h src/Aeternity/Address.h src/NEAR/Serialization.cpp src/NEAR/Address.cpp src/NEAR/Signer.cpp src/NEAR/Entry.cpp src/NEAR/Account.cpp src/NEAR/Entry.h src/BinaryCoding.cpp src/PublicKey.cpp src/Icon/Signer.cpp src/Icon/Address.cpp src/Icon/Entry.cpp src/Icon/Entry.h src/Icon/Signer.h src/Zilliqa/Signer.cpp src/Zilliqa/AddressChecksum.cpp src/Zilliqa/Address.h src/Zilliqa/Entry.cpp src/Zilliqa/Entry.h src/Zilliqa/Address.cpp src/Aion/Signer.cpp src/Aion/Address.cpp src/Aion/Transaction.cpp src/Aion/Transaction.h src/Aion/RLP.h src/Aion/Entry.cpp src/Aion/Address.h src/Aion/Entry.h src/Base58.cpp src/XXHash64.h src/Bech32.cpp src/Hash.cpp src/Elrond/Serialization.cpp src/Elrond/Signer.cpp src/Elrond/Entry.cpp src/Elrond/Address.h src/Elrond/Address.cpp src/Elrond/Entry.h src/VeChain/Transaction.cpp src/VeChain/Signer.cpp src/VeChain/Entry.cpp src/VeChain/Clause.h src/VeChain/Transaction.h src/VeChain/Entry.h src/Groestlcoin/Address.cpp src/Groestlcoin/Signer.cpp src/Groestlcoin/Entry.cpp src/Groestlcoin/Transaction.h src/Groestlcoin/Address.h src/Groestlcoin/Entry.h src/DerivationPath.h src/Wanchain/Signer.cpp src/Wanchain/Entry.cpp src/Wanchain/Address.cpp src/Wanchain/Entry.h src/Wanchain/Signer.h src/Wanchain/Address.h src/Bech32Address.cpp src/Encrypt.cpp src/Hash.h src/uint256.h src/SS58Address.h src/Base58Address.h src/Base64.cpp src/BinaryCoding.h src/DerivationPath.cpp src/Result.h src/HexCoding.h src/Base32.h src/CoinEntry.h src/Crc.cpp src/Cbor.h src/Bech32.h src/Data.h src/Base58.h src/Kusama/Entry.cpp src/Kusama/Address.h src/Kusama/Entry.h src/Bech32Address.h src/PublicKey.h src/PrivateKey.h src/Data.cpp src/HDWallet.h src/Coin.h walletconsole/lib/CommandExecutor.cpp walletconsole/lib/Keys.cpp walletconsole/lib/Util.cpp walletconsole/lib/Address.cpp walletconsole/lib/Coins.cpp walletconsole/lib/Buffer.cpp walletconsole/lib/WalletConsole.cpp walletconsole/lib/Buffer.h walletconsole/lib/TonCoin.h walletconsole/lib/Coins.h walletconsole/lib/WalletConsole.h walletconsole/lib/Keys.h walletconsole/lib/Util.h walletconsole/lib/CommandExecutor.h walletconsole/lib/Address.h

No flags found

Use flags to group coverage reports by test type, project and/or folders.
Then setup custom commit statuses and notifications for each flag.

e.g., #unittest #integration

#production #enterprise

#frontend #backend

Learn more about Codecov Flags here.

Showing 1 of 3 files from the diff.

@@ -125,14 +125,19 @@
Loading
125 125
        j["amount"] = tokensJSON(input.time_lock_order().amount());
126 126
        j["lock_time"] = input.time_lock_order().lock_time();
127 127
    } else if (input.has_time_relock_order()) {
128 +
        const auto amount = input.time_relock_order().amount();
128 129
        j["from"] = addressString(input.time_relock_order().from_address());
129 -
        j["id"] = input.time_relock_order().id();
130 +
        j["time_lock_id"] = input.time_relock_order().id();
130 131
        j["description"] = input.time_relock_order().description();
131 -
        j["amount"] = tokensJSON(input.time_relock_order().amount());
132 +
        // if amount is empty or omitted, set null to avoid signature verification error
133 +
        j["amount"] = nullptr;
134 +
        if (amount.size() > 0) {
135 +
            j["amount"] = tokensJSON(amount);
136 +
        }
132 137
        j["lock_time"] = input.time_relock_order().lock_time();
133 138
    } else if (input.has_time_unlock_order()) {
134 139
        j["from"] = addressString(input.time_unlock_order().from_address());
135 -
        j["id"] = input.time_unlock_order().id();
140 +
        j["time_lock_id"] = input.time_unlock_order().id();
136 141
    }
137 142
    return j;
138 143
}

Everything is accounted for!

No changes detected that need to be reviewed.
What changes does Codecov check for?
Lines, not adjusted in diff, that have changed coverage data.
Files that introduced coverage data that had none before.
Files that have missing coverage data that once were tracked.
Files Coverage
src +<.01% 95.26%
walletconsole/lib 95.09%
Project Totals (430 files) 95.25%
Loading