void WalletSerializer::save(const std::string& password, Common::IOutputStream& destination, bool saveDetails, bool saveCache) {
  CryptoContext cryptoContext = generateCryptoContext(password);

  CryptoNote::BinaryOutputStreamSerializer s(destination);
  s.beginObject("wallet");

  saveVersion(destination);
  saveIv(destination, cryptoContext.iv);

  saveKeys(destination, cryptoContext);
  saveWallets(destination, saveCache, cryptoContext);
  saveFlags(saveDetails, saveCache, destination, cryptoContext);

  if (saveDetails) {
    saveTransactions(destination, cryptoContext);
    saveTransfers(destination, cryptoContext);
  }

  if (saveCache) {
    saveBalances(destination, saveCache, cryptoContext);
    saveTransfersSynchronizer(destination, cryptoContext);
    saveSpentOutputs(destination, cryptoContext);
    saveUnlockTransactionsJobs(destination, cryptoContext);
    saveChange(destination, cryptoContext);
  }

  s.endObject();
}
void WalletSerializerV2::save(Common::IOutputStream& destination, WalletSaveLevel saveLevel) {
  CryptoNote::BinaryOutputStreamSerializer s(destination);

  uint8_t saveLevelValue = static_cast<uint8_t>(saveLevel);
  s(saveLevelValue, "saveLevel");

  saveKeyListAndBanalces(s, saveLevel == WalletSaveLevel::SAVE_ALL);

  if (saveLevel == WalletSaveLevel::SAVE_KEYS_AND_TRANSACTIONS || saveLevel == WalletSaveLevel::SAVE_ALL) {
    saveTransactions(s);
    saveTransfers(s);
  }

  if (saveLevel == WalletSaveLevel::SAVE_ALL) {
    saveTransfersSynchronizer(s);
    saveUnlockTransactionsJobs(s);
    s(m_uncommitedTransactions, "uncommitedTransactions");
  }

  s(m_extra, "extra");
}
Example #3
0
int main (int argc, char **argv){

    char *fileName;
    char *client_id;

    if(argc != 3){
        fprintf(stderr, "Wrong number of parameters. Expected 2, found %d\n", (argc - 1));

        return EXIT_FAILURE;
    }

    fileName = argv[1];
    client_id = argv[2];

    for(int i = 0; i < strlen(client_id); i++){
        if(!isdigit(*(client_id + i))){
            fprintf(stderr, "Account number %s must be integer\n", client_id);
    
            return EXIT_FAILURE;
        }
    }

    FILE *transactionFile = fopen(fileName, "r");

    if(transactionFile == NULL){
        perror("fopen()");
        fprintf(stderr, "failed in file %s at line# %d\n", __FILE__, __LINE__-4);
        return EXIT_FAILURE;
    }

    char *line = malloc((LINE_SIZE + 1) *  sizeof (char));

    if(line == NULL){
        fprintf(stderr, "Insufficient memory at line #%d\n", __LINE__);

        fclose(transactionFile);

        return EXIT_FAILURE;
    }

    size_t lineNumber = 0;

    Transaction *transactions;

    if(fgets(line, (LINE_SIZE + 1), transactionFile) != NULL){
        lineNumber++;

        trim(line);

        transactions = createTransaction(line);

        if(transactions == NULL){
            fprintf(stderr, "Transaction in line %zu could not be created\n", lineNumber);
       
            free(line);
            fclose(transactionFile);
    
            return EXIT_FAILURE;
        }

        while(fgets(line, (LINE_SIZE + 1), transactionFile) != NULL){
            lineNumber++;
    
            trim(line);
    
            Transaction *transaction = createTransaction(line);
    
            if(transaction == NULL){
               fprintf(stderr, "Transaction in line %zu could not be created\n", lineNumber);
       
               freeTransactions(transactions);
               free(line);
               fclose(transactionFile);
    
                return EXIT_FAILURE;
            }

            addTransaction(transactions, transaction);
        }
    }

    if(ferror(transactionFile)){
        fprintf(stderr, "fgets() failed in file %s at line # %d\n", __FILE__, __LINE__);

        freeTransactions(transactions);
        free(line);

        return EXIT_FAILURE;
    }

    saveTransactions(transactions, client_id);
    printTransactionError(transactions);

    freeTransactions(transactions);

    fclose(transactionFile);

    return EXIT_SUCCESS;
}