Уточнение наследования (недопустимое количество аргументов для функции Solidity)

У меня есть 3 контракта: Пользователь, Пациент и Доктор. Пациент и доктор оба наследуют от пользователя.

Пользователь.sol

contract User { 
    // Stuff not relevant for question
    function User() {
        // Constructs 
    }
}

Пациент.sol

contract Patient is User {
    mapping(bytes32 => bytes32[]) category_Records;
    mapping(bytes32 => Record) id_Record;
    // Records
    struct Record {
        bytes32 id;
        bytes32 category;
        address addedBy;
        address addedByContract;
        uint dateAdded;
        bytes32 _hash;
        bool verified;
    }
    // Adding record
    function addRecord(bytes32 _id, bytes32 _category, bytes32 _hash) {
        Record memory newRecord = Record(_id, _category, tx.origin, msg.sender, now, _hash, false);
        id_Record[_id] = newRecord;
        category_Records[_category].push(_id);
    }
}

Доктор.соль

contract Doctor is User {
    // Adding record
    function addRecord(bytes32 patientID, bytes32 _id, bytes32 _category, bytes32 _hash) {
        // The registry bit is a registry contract which is working
        address _patient = registry.getContractAddress(patientID); 
        // From the registry we get the patient contract address
        Patient patient = Patient(_patient);
        patient.addRecord(_id, _category, _hash);
    }
}

У меня есть кнопка в моем интерфейсе, которая вызывает

contract.user.doctor.addRecord(publicAddress, contractAddress, pID, _id, category, hash);

который, в свою очередь, вызывает (эта функция находится внутри объекта contract.user.doctor)

function addRecord(publicAddress, contractAddress, pID, _id, category, hash) {
    const input = fs.readFileSync('contracts/All.sol').toString();
    const output = solc.compile(input);
    const bytecode = output.contracts[':Doctor'].bytecode;
    const abi = JSON.parse(output.contracts[':Doctor'].interface);
    const contract = web3.eth.contract(abi).at(contractAddress);
    // Insert gas estimation here, default prob insufficient
    contract.addRecord(patientID, _id, _category, _hash, {from: publicAddress}, (err, res) => {
        if (err) {
            console.log(err);
        } else {
            console.log('tx: ' + res);
        }
    });
}

Когда я нажимаю на нее, я возвращаюсь

Error: Invalid number of arguments to Solidity function

Причина, по которой я думаю , что это связано с наследованием, заключается в том, что я пытался для тестирования сделать Doctor автономным (не унаследованным) контрактом только с двумя методами getBytes()и setBytes(). Когда я звонил из своего приложения узла, все работало нормально.

Я проверял много раз, и у функции Solidity есть правильные аргументы, поэтому я понятия не имею, почему она возвращает мне эту ошибку.

Есть идеи?

Ответы (1)

Похоже, вы передаете nullпервый аргумент объекту контракта web3.

Эта линия имеет pID:

function addRecord(publicAddress, contractAddress, pID, _id, category, hash) {

У этого есть patientID:

contract.addRecord(patientID, _id, _category, _hash, {from: publicAddress}, (err, res) => {