Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

typeerror: cannot read property '0' of undefined #280

Open
robelkebede44 opened this issue Feb 5, 2019 · 3 comments

Comments

@robelkebede44
Copy link

commented Feb 5, 2019

TypeError: Cannot read property '0' of undefined
chain_app_1 | at /app/node_modules/bigchaindb-driver/dist/node/transaction.js:285:49
chain_app_1 | at Array.map ()
chain_app_1 | at Function.makeTransferTransaction (/app/node_modules/bigchaindb-driver/dist/node/transaction.js:280:41)
chain_app_1 | at Promise (/app/chain.js:205:60)
chain_app_1 | at new Promise ()
chain_app_1 | at foodchain.transferAsset (/app/foodchain.js:198:16)
chain_app_1 | at app.post (/app/index.js:52:13)
chain_app_1 | at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
chain_app_1 | at next (/app/node_modules/express/lib/router/route.js:137:13)
chain_app_1 | at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3

@frank-nankivell

This comment has been minimized.

Copy link

commented Oct 8, 2019

I am experiencing the same issue, did this get resolved or is it an error with implementation?

@frank-nankivell

This comment has been minimized.

Copy link

commented Oct 9, 2019

The error comes when using the approach to create a transaction as set within the docs: http://docs.bigchaindb.com/projects/js-driver/en/latest/usage.html but are triggering an error. I am new to using bighchain so unaware if I am implementing this in error.

The error is within this part of the driver:

node_modules/bigchaindb-driver/dist/node/transaction.js:285

See code

      key: 'makeTransferTransaction',
        value: function makeTransferTransaction(unspentOutputs, outputs, metadata) {
            var inputs = unspentOutputs.map(function (unspentOutput) {
                var _tx$outputIndex = { tx: unspentOutput.tx, outputIndex: unspentOutput.output_index },
                    tx = _tx$outputIndex.tx,
                    outputIndex = _tx$outputIndex.outputIndex;

                var fulfilledOutput = tx.outputs[outputIndex];
                var transactionLink = {
                    'output_index': outputIndex,
                    'transaction_id': tx.id
                };

                return Transaction.makeInputTemplate(fulfilledOutput.public_keys, transactionLink);
            });

I am using "bigchaindb-driver": "^4.1.0",

The code I am using to call the driver and make the transaction is set out below

 module.exports.transferAsset = function(req, res) {

    const conn = new driver.Connection(API_PATH)

    // patientID_79 08102019
    // written as variable directly whilst testing
    var privateKey = 'AE1hUbzmmDe6CPsMNVM48KSrSqcFAjUF9gbDDYbhVVwJ';

    // CREATE transaction id
    // written as variable directly whilst testing
    var id = '44f30e4feb82f53ae1407aed61d43a82c3db2891fa039019d926dfeb340c1714';

    // create new owner for the asset
    var name = new driver.Ed25519Keypair()

    if(name.publicKey != null || name.publickey != undefined)
    {
        console.log('New persons public key', name.publicKey)
        // find original transaction via the transaction ID
        let transaction = conn.getTransaction(id)
        // ^^ maybe the above functio is undefined
        //console.log('transaction ID', transaction)
        if (transaction == null ||transaction == undefined) {
          var error = 'error';
          res.status(400).json(error)
          return;
        } 
        else
        {
          console.log(transaction, 'transaction') 
            // create new transfer transaction
          const newTransfer = driver.Transaction.makeTransferTransaction(
          // unspent outputs
          [{ tx: transaction, output_index: 0 }],
          // outputs
          [driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(name.publicKey))],

            // metadata
            {
            time: '30 days',
            research_project: 'analysis',
            lay_summary:'analysis on xyz'
            }

          ).then(() => {
            res.status(200).json(newTransfer)
            console.log(newTransfer)
          });
        };

      };
      var error2 = 'error';
      res.status(400).json(error2)
      return;
  };

Error message is the same as earlier ticket:

TypeError: Cannot read property '0' of undefined

@frank-nankivell

This comment has been minimized.

Copy link

commented Oct 19, 2019

Coming back here to provide input for any other user coming into the same issue. The problem is entirely due to implementation. I assume this can be closed - but not my ticket in the first place.

The reason for the error is the use of this function:

let transaction = conn.getTransaction(id)

Which needs to be implemented like this:

        conn.getTransaction(id)
        .then((result) => {
          console.log('getTransaction as callback: ', result)

          const newTransfer = driver.Transaction
            .makeTransferTransaction(
          [{ 
            tx: result, 
            output_index: 0
          }],
        // outputs
        [driver.Transaction.makeOutput(
          driver.Transaction
          .makeEd25519Condition(name.publicKey))],
          // metadata
          {
          time: '30 days',
          research_project: 'analysis',
          lay_summary:'analysis on xyz'
          }
        )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.