Code coverage report for ethereum.js/lib/web3/contract.js

Statements: 88.57% (31 / 35)      Branches: 75% (3 / 4)      Functions: 83.33% (10 / 12)      Lines: 88.57% (31 / 35)      Ignored: none     

All files » ethereum.js/lib/web3/ » contract.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                                            1 1 1 1 1   1 14 30   20   20       1 14 30   8   8                                                   1     14     1   14 14 13     1 1 1 1 1     14 14     1         1         1    
/*
    This file is part of ethereum.js.
 
    ethereum.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
 
    ethereum.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public License
    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** 
 * @file contract.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */
 
var web3 = require('../web3'); 
var solAbi = require('../solidity/abi');
var utils = require('../utils/utils');
var SolidityEvent = require('./event');
var SolidityFunction = require('./function');
 
var addFunctionsToContract = function (contract, desc) {
    desc.filter(function (json) {
        return json.type === 'function';
    }).map(function (json) {
        return new SolidityFunction(json, contract.address);
    }).forEach(function (f) {
        f.attachToContract(contract);
    });
};
 
var addEventsToContract = function (contract, desc) {
    desc.filter(function (json) {
        return json.type === 'event';
    }).map(function (json) {
        return new SolidityEvent(json, contract.address);
    }).forEach(function (e) {
        e.attachToContract(contract);
    });
};
 
/**
 * This method should be called when we want to call / transact some solidity method from javascript
 * it returns an object which has same methods available as solidity contract description
 * usage example: 
 *
 * var abi = [{
 *      name: 'myMethod',
 *      inputs: [{ name: 'a', type: 'string' }],
 *      outputs: [{name: 'd', type: 'string' }]
 * }];  // contract abi
 *
 * var MyContract = web3.eth.contract(abi); // creation of contract prototype
 *
 * var contractInstance = new MyContract('0x0123123121');
 *
 * contractInstance.myMethod('this is test string param for call'); // myMethod call (implicit, default)
 * contractInstance.call().myMethod('this is test string param for call'); // myMethod call (explicit)
 * contractInstance.sendTransaction().myMethod('this is test string param for transact'); // myMethod sendTransaction
 *
 * @param abi - abi json description of the contract, which is being created
 * @returns contract object
 */
var contract = function (abi) {
 
    // return prototype
    return Contract.bind(null, abi);
};
 
var Contract = function (abi, options) {
 
    this.address = '';
    if (utils.isAddress(options)) {
        this.address = options;
    } else { // is an object!
        // TODO, parse the rest of the args
        options = options || {};
        var args = Array.prototype.slice.call(arguments, 2);
        var bytes = solAbi.formatConstructorParams(abi, args);
        options.data += bytes;
        this.address = web3.eth.sendTransaction(options);
    }
 
    addFunctionsToContract(this, abi);
    addEventsToContract(this, abi);
};
 
Contract.prototype.call = function () {
    console.error('contract.call is deprecated');
    return this;
};
 
Contract.prototype.sendTransaction = function () {
    console.error('contract.sendTransact is deprecated');
    return this;
};
 
module.exports = contract;