#1148 [Filecoin] Add json to output

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/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/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/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.


@@ -5,7 +5,10 @@
Loading
5 5
// file LICENSE at the root of the source code distribution tree.
6 6
7 7
#include "Transaction.h"
8 +
#include <nlohmann/json.hpp>
9 +
#include "Base64.h"
8 10
11 +
using json = nlohmann::json;
9 12
using namespace TW;
10 13
using namespace TW::Filecoin;
11 14
@@ -57,13 +60,23 @@
Loading
57 60
    cid.insert(cid.end(), hash.begin(), hash.end());
58 61
    return cid;
59 62
}
60 -
61 -
Data Transaction::serialize(Data& signature) const {
62 -
    // Wrap signature in object.
63 -
    Data sigObject;
64 -
    TW::append(sigObject, 0x01); // Prepend IKTSecp256k1 type
65 -
    TW::append(sigObject, signature);
66 -
    // Create Filecoin SignedMessage
67 -
    auto signedMessage = Cbor::Encode::array({message(), Cbor::Encode::bytes(sigObject)});
68 -
    return signedMessage.encoded();
63 +
std::string Transaction::serialize(Data& signature) const {
64 +
    json tx = {
65 +
        {"Message", json{
66 +
                {"To", to.string()},
67 +
                {"From", from.string()},
68 +
                {"Nonce", nonce},
69 +
                {"Value", toString(value)},
70 +
                {"GasPremium", toString(gasPremium)},
71 +
                {"GasFeeCap", toString(gasFeeCap)},
72 +
                {"GasLimit", gasLimit},
73 +
            }
74 +
        },
75 +
        {"Signature", json{
76 +
                {"Type", 1},
77 +
                {"Data", Base64::encode(signature)},
78 +
            }
79 +
        },
80 +
    };
81 +
    return tx.dump();
69 82
}

@@ -16,24 +16,25 @@
Loading
16 16
    auto key = PrivateKey(Data(input.private_key().begin(), input.private_key().end()));
17 17
    auto pubkey = key.getPublicKey(TWPublicKeyTypeSECP256k1Extended);
18 18
    Address from_address(pubkey);
19 -
    Address to_address(input.to_address());
19 +
    Address to_address(input.to());
20 20
    Transaction transaction(
21 21
        /* to */ to_address,
22 22
        /* from */ from_address,
23 23
        /* nonce */ input.nonce(),
24 24
        /* value */ load(input.value()),
25 25
        /* gasLimit */ input.gas_limit(),
26 26
        /* gasFeeCap */ load(input.gas_fee_cap()),
27 -
        /* gasPremium */ load(input.gas_premium()));
27 +
        /* gasPremium */ load(input.gas_premium())
28 +
    );
28 29
29 30
    // Sign transaction.
30 31
    auto signature = sign(key, transaction);
31 -
    auto encoded = transaction.serialize(signature);
32 +
    const auto json = transaction.serialize(signature);
32 33
33 34
    // Return Protobuf output.
34 -
    Proto::SigningOutput protoOutput;
35 -
    protoOutput.set_encoded(encoded.data(), encoded.size());
36 -
    return protoOutput;
35 +
    Proto::SigningOutput output;
36 +
    output.set_json(json.data(), json.size());
37 +
    return output;
37 38
}
38 39
39 40
Data Signer::sign(const PrivateKey& privateKey, Transaction& transaction) noexcept {
@@ -47,5 +48,5 @@
Loading
47 48
    google::protobuf::util::JsonStringToMessage(json, &input);
48 49
    input.set_private_key(key.data(), key.size());
49 50
    auto output = Signer::sign(input);
50 -
    return hex(output.encoded());
51 +
    return output.json();
51 52
}

@@ -56,8 +56,8 @@
Loading
56 56
    // cid returns the raw Filecoin message CID (excluding the signature).
57 57
    Data cid() const;
58 58
59 -
    // serialize returns the CBOR encoding of the Filecoin SignedMessage.
60 -
    Data serialize(Data& signature) const;
59 +
    // serialize returns json ready for MpoolPush rpc
60 +
    std::string serialize(Data& signature) const;
61 61
};
62 62
63 63
} // namespace TW::Filecoin

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