¿Cómo almacenar valores negativos dentro de {8||16||32} bits en populus?

Quiero almacenar -1en la memoria más pequeña, como en {8||16||32} bits en lugar de 256 bits.

int i = -1;

Cuando vuelvo var, vuelve -1Len lugar de -1.

He asignado -1en una int8variable. Como sé int8es entero con signo.

int8 i = -1;

Pero cuando regreso output, devuelve: '115792089237316195423570985008687907853269984665640564039457584007913129639679L' en lugar de -1.

[P] ¿Qué debo hacer para obtener -1?

Tenga en cuenta que he experimentado este problema en populus:

Como contrato he usado el contrato de @RichardHorrocks: NumTesten la respuesta.

prueba.py:

def test_receipt(web3, accounts, chain, unmigrated_chain):
    my_contract       = unmigrated_chain.get_contract('NumTest');

    set_txn_hash     = my_contract.transact().NumTest();
    contract_address = unmigrated_chain.wait.for_receipt(set_txn_hash)

    output           = my_contract.call().number();
    print(output);

Gracias por su valioso tiempo y ayuda.

Respuestas (1)

Este código -1me devuelve (para ambos int8y int):

pragma solidity ^0.4.6;

contract NumTest {

    int8 i;

    function NumTest() {
        i = -1;
    }

    function number() constant returns (int8 num) {
        return i;    
    }
}

Como se mencionó en hilos anteriores, debido a los costos de desempacar , el int8estuche (278 gasolina) es en realidad más caro que el estuche predeterminado int( int256224 gasolina).

Para el código anterior, y para completar (y porque estaba interesado):

integer bits | gas cost
-------------+---------
     8       |   278
    16       |   278
    32       |   278
    64       |   278
   128       |   278
   248       |   278
   256       |   224

Por lo tanto, los costos de desempacar son los mismos para cualquier cosa por debajo del tamaño óptimo.

Lamento mucho no haber mencionado que experimenté este problema populusy, dado que no funcionaba populus, asumí que no funcionará en un entorno de cadena de bloques real. Supongo que el problema puede estar relacionado con pythono populussupongo. He actualizado mi pregunta con mi caso de prueba.@RichardHorrocks
Ah, está bien, gracias por agregar los detalles adicionales. Dejaré mi respuesta en caso de que sea útil para alguien más, ¡aunque me doy cuenta de que ya no responde a su pregunta específica!