Parity kompiliert Vertrag nicht fehlerfrei

Wenn ich den folgenden Vertrag in das Entwicklungsfeld von Parity eingebe, beschwert er sich nicht, aber ich kompiliere den Vertrag auch nicht, was die Bereitstellung unmöglich macht. Irgendwelche Vorschläge? Ich habe versucht, den Vertrag zu lintieren, aber er scheint syntaktisch korrekt zu sein.

pragma solidity ^0.4.11;

/// @title Name Resolver for multiple contracts
/// Resolves contract names to their current version's address
contract Register {
    address owner;
    mapping (string => address) public backends;

    function Register() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function changeBackend(string contractName, address newBackend) public onlyOwner() returns (bool) {
        if(newBackend != backends[contractName]) {
            backends[contractName] = newBackend;
            return true;
        }

        return false;
    }
}

Antworten (1)

Es stellt sich heraus, dass es sich um einen Fehler handelt, den weder Parity noch Atomlinter zeigen. Die Verwendung von Remix gibt den Fehler:

"Accessors for mapping with dynamically-sized keys not yet implemented.”

Der Fehler kann also behoben werden, indem das Mapping geändert wird auf:

mapping (bytes32 => address) public backends;

Und stellen Sie einen benutzerdefinierten Getter für die Backends bereit:

function getBackend(string contractName) returns (address) {
    return backends[keccak256(contractName)];
}

Ähnliches Verfahren mit dem Setter.