contract SimpleStorage {
mapping(bytes32 => string) storedData;
function set(bytes32 key, string value) {
storedData[key] = value;
}
function get(bytes32 key) constant returns (string retVal) {
return storedData[key];
}
}
En la consola geth:
mySource = 'contract SimpleStorage { mapping(bytes32 => string) storedData; function set(bytes32 key, string value) { storedData[key] = value;} function get(bytes32 key) constant returns (string retVal) { return storedData[key];}}'
myCompiled = web3.eth.compile.solidity(mySource)
myContract = web3.eth.contract(myCompiled.SimpleStorage.info.abiDefinition);
SimpleStorage = myContract.new({from:web3.eth.accounts[0], data: myCompiled.SimpleStorage.code, gas: 10000000})
miner.start()
SimpleStorage.address (I get "0x03b6676ec81168749af1a92783e67bf3b065add3")
SimpleStorage.set.sendTransaction("hash", "value", {from: eth.accounts[0]})
miner.start()
miner.stop()
eth.getStorageAt("0x03b6676ec81168749af1a92783e67bf3b065add3")
Yo obtengo:
0x00000000000000000000000000000000000000000000000000000000000000000
¿Por qué no ha cambiado el contrato de almacenamiento?
El contrato de almacenamiento cambió, solo debe probar el siguiente comando:eth.getStorageAt("0x03b6676ec81168749af1a92783e67bf3b065add3",web3.sha3(0x68617368000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,{"encoding":"hex"}))
El primer argumento es la dirección de su contrato, mientras que el segundo es la posición de almacenamiento donde se almacena su valor. En este caso, el valor se calcula como sha3(key+pos)
donde +
está la concatenación, key
es 0x6861736800000000000000000000000000000000000000000000000000000000
(este es el resultado web3.fromAscii("hash")
y se completa con 256 bits), mientras que pos
es 0000000000000000000000000000000000000000000000000000000000000000
.
Obtendrá 0x76616c756500000000000000000000000000000000000000000000000000000a
, que es "valor" pero en formato hexadecimal.
Puede encontrar más información sobre el diseño del almacenamiento aquí .
Laxmana
get
la función?