Author

Topic: [Programmazione] Smart Contracts (Read 20988 times)

sr. member
Activity: 1337
Merit: 288
0xbt
November 05, 2019, 03:10:15 PM
Grazie makkara, ma questa è comunque una soluzione leggermente diversa.
Voglio provare a finire:
https://bitcointalksearch.org/topic/how-to-make-a-crypto-testament-5052754
Smart contract per il calcolo dell'indirizzo del contratto:
Code:
pragma solidity 0.4.18;
contract Balls {
    function addressFrom(address _origin, uint _nonce) public pure returns (address) {
        if(_nonce == 0x00)     return address(keccak256(byte(0xd6), byte(0x94), _origin, byte(0x80)));
        if(_nonce <= 0x7f)     return address(keccak256(byte(0xd6), byte(0x94), _origin, byte(_nonce)));
        if(_nonce <= 0xff)     return address(keccak256(byte(0xd7), byte(0x94), _origin, byte(0x81), uint8(_nonce)));
        if(_nonce <= 0xffff)   return address(keccak256(byte(0xd8), byte(0x94), _origin, byte(0x82), uint16(_nonce)));
        if(_nonce <= 0xffffff) return address(keccak256(byte(0xd9), byte(0x94), _origin, byte(0x83), uint24(_nonce)));
        return address(keccak256(byte(0xda), byte(0x94), _origin, byte(0x84), uint32(_nonce))); // more than 2^32 nonces not realistic
    }    
}
;-)))
https://rinkeby.etherscan.io/address/0x156e6451d6d1cf1a3cb3be03b229b71e58ce2774#readContract
full member
Activity: 1064
Merit: 166
October 28, 2019, 03:43:10 AM
#99
Ciao.
Come scrivere un semplice contratto intelligente come 'Hello World', ma in modo che possa essere creato solo da un indirizzo specifico?
Cioè, sarà impossibile distribuirlo da un altro indirizzo.
Dovrei in qualche modo scrivere l'indirizzo nel smart contract?
Grazie.

Dovresti creare uno smart contract "padre" in grado di fare il deploy di smart contract "figli", non ho provato ma a quanto pare si può fare.

Code:
function newPurchase()
public
payable
returns(address newContract)
{
Purchase c = (new Purchase).value(msg.value)(address(msg.sender));
contracts.push(c);
lastContractAddress = address(c);
emit newPurchaseContract(c);
return c;
}

https://github.com/jacksonng77/StartEscrow/blob/master/Solidity/StartEscrow.sol

Il tuo SC padre sarà customizzabile e potrai decidere a quale indirizzo permettere di fare il deploy di un certo SC figlio

Qui c'è un esempio per qualcosa di simile
https://medium.com/coinmonks/creating-smart-contracts-with-smart-contract-d54e21d26e00
sr. member
Activity: 1337
Merit: 288
0xbt
October 25, 2019, 12:23:23 PM
#98
Ciao.
Come scrivere un semplice contratto intelligente come 'Hello World', ma in modo che possa essere creato solo da un indirizzo specifico?
Cioè, sarà impossibile distribuirlo da un altro indirizzo.
Dovrei in qualche modo scrivere l'indirizzo nel smart contract?
Grazie.
full member
Activity: 1064
Merit: 166
June 05, 2019, 02:26:27 PM
#97
Ciao.
Trovato un argomento interessante:

"Vyper"

"Vyper" è un linguaggio di sviluppo smart contract.
Documentazione:
https://vyper.readthedocs.io/en/v0.1.0-beta.10/index.html
GitHub:
https://github.com/ethereum/vyper
Online compiler:
https://vyper.online
https://etherscan.io/vyper
https://rinkeby.etherscan.io/vyper
Vasto link GitHub alle risorse Vyper:
https://github.com/ethereum/vyper/wiki/Vyper-tools-and-resources

Ad esempio, su Smart Contracts vyper, lo scambio di Uniswap funziona.

Qualcuno ha studiato questa zona?


Non lo conosco, è da un pò che non metto mano agli smart contract. A prima vista sembra una figata. Magari faccio qualche prova per vedere come funziona.
sr. member
Activity: 1337
Merit: 288
0xbt
June 03, 2019, 05:40:51 PM
#96
Ciao.
Trovato un argomento interessante:

"Vyper"

"Vyper" è un linguaggio di sviluppo smart contract.
Documentazione:
https://vyper.readthedocs.io/en/v0.1.0-beta.10/index.html
GitHub:
https://github.com/ethereum/vyper
Online compiler:
https://vyper.online
https://etherscan.io/vyper
https://rinkeby.etherscan.io/vyper
Vasto link GitHub alle risorse Vyper:
https://github.com/ethereum/vyper/wiki/Vyper-tools-and-resources

Ad esempio, su Smart Contracts vyper, lo scambio di Uniswap funziona.

Qualcuno ha studiato questa zona?
sr. member
Activity: 1337
Merit: 288
0xbt
January 26, 2019, 10:35:22 AM
#95
Da tempo desideravo aggiungere una funzione interessante a un contratto di token. Ho cercato di capire funzioni simili nei contratti ED e TS. Grazie, Google ha trovato questo argomento. Grazie a Makkara per avermi aiutato a capire queste funzioni, grazie alle quali sono riuscito a creare la funzione utile desiderata.
full member
Activity: 1064
Merit: 166
January 25, 2019, 08:29:10 AM
#94
Code:
function withdrawToken_to(address token, address _to, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(_to, amount)) throw;
    Withdraw(token, _to, amount, tokens[token][msg.sender]);
  }

Tutto è andato, grazie.

Ma non riesco a capire cosa sia e cosa fare al riguardo?
Che cosa fa questa funzione e come usarla?



quello serve per tenere conto dei token presenti nel contratto e chi è il proprietario, gli passi l'indirizzo token e indirizzo personale e ti ritorna il totale.

Code:
mapping (address => mapping (address => uint)) public tokens; //questo mappa un indirizzo di un token con un la mappatura di un indirizzo di un proprietario e la quantità di quei tokens
sr. member
Activity: 1337
Merit: 288
0xbt
January 24, 2019, 06:19:50 PM
#93
Code:
function withdrawToken_to(address token, address _to, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(_to, amount)) throw;
    Withdraw(token, _to, amount, tokens[token][msg.sender]);
  }

Tutto è andato, grazie.

Ma non riesco a capire cosa sia e cosa fare al riguardo?
Che cosa fa questa funzione e come usarla?

sr. member
Activity: 1337
Merit: 288
0xbt
January 23, 2019, 05:48:51 PM
#92
Code:
if (!Token(token).transfer(_to, amount)) throw;
Code:
function withdrawToken_to(address token, address _to, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(_to, amount)) throw;
    Withdraw(token, _to, amount, tokens[token][msg.sender]);
  }

Ieri ho provato a fare qualcosa di simile.

Comunque è importante ricordarsi di aver dato l'approvazione allo smart contract di spendere i token, chiamando il metodo approve direttamente dal contratto del token.

Apparentemente me ne sono dimenticato. Domani farò dei test.
Grazie.
Mi scuso per la traduzione scadente.
full member
Activity: 1064
Merit: 166
January 23, 2019, 05:17:08 PM
#91
Non l'ho provato ma dovrebbe funzionare. Basta semplicemente sostituire il proprio indirizzo in questa parte sotto

Code:
if (!Token(token).transfer(msg.sender, amount)) throw;

con l'indirizzo a cui vogiamo mandare i token:

Code:
if (!Token(token).transfer(_to, amount)) throw;

Code:
function withdrawToken_to(address token, address _to, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(_to, amount)) throw;
    Withdraw(token, _to, amount, tokens[token][msg.sender]);
  }


Appena ho un pò di tempo verifico se è corretto. Comunque è importante ricordarsi di aver dato l'approvazione allo smart contract di spendere i token, chiamando il metodo approve direttamente dal contratto del token.
sr. member
Activity: 1337
Merit: 288
0xbt
January 23, 2019, 02:00:59 PM
#90
Come gestire token in uno smart contract:

Code:
function prelievoToken(address token, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(msg.sender, amount)) throw;
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }

Ciao, come aggiungere la seguente funzione a questo smart contract:

Code:
function withdrawToken_to(address _token, address _to, uint _amount) 

full member
Activity: 1064
Merit: 166
November 12, 2018, 12:23:33 AM
#89
Se hai qualche informazione base o link che spiegano qualcisa in generale e come pubblicarli e interagire. Potrebbe essere utile come alternativa.
Se parli di waves ho riportato i link che ho trovato utili. Sono molto lento ad approfondire e alla fine mi perdo. ....

Penso di aver bevuto un pò troppo ieri, pensavo fosse un esempio  8. Poi riporto nel primo post i link.

È uscito cryptozombie season 2

https://medium.com/loom-network/cryptozombies-season-2-is-here-and-introducing-zombie-battleground-custom-game-modes-f1f09efa24f4
legendary
Activity: 2506
Merit: 1120
November 11, 2018, 06:21:29 AM
#88
Se hai qualche informazione base o link che spiegano qualcisa in generale e come pubblicarli e interagire. Potrebbe essere utile come alternativa.
Se parli di waves ho riportato i link che ho trovato utili. Sono molto lento ad approfondire e alla fine mi perdo. ....
full member
Activity: 1064
Merit: 166
November 11, 2018, 01:11:56 AM
#87
Se hai qualche informazione base o link che spiegano qualcisa in generale e come pubblicarli e interagire. Potrebbe essere utile come alternativa.
legendary
Activity: 2506
Merit: 1120
November 10, 2018, 06:12:29 PM
#86
Cercano un programmatore smart contract waves,
https://bitcointalksearch.org/topic/in-cerca-di-persone-in-grado-di-sviluppare-soluzioni-smart-contract-su-waves-5066539
non sapevo esistessero e ho iniziato a guardare ...
Vi copio/incollo gli appunti che ho preso ...

Code:
Smart contract (waves - appunti sparsi)
    white paper
    video esempio
    documentazione
        Associ uno scrip ad un account
        Le transazioni sono valide se lo script approva
            Firme e altri dati
            proofs
                ?
            Numero blocchi della catena
            dati presenti nella catena, oracoli
                Inseriti con DataTransaction
            Gli script possono essere sostituiti o annullati associandone uno nuovo
                A meno che lo script precedente non lo vieti
            Default script di un account
                sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPk)
           
        Costo script
            Dipendono dalla complessità
            max 8kByte
            minimo: 0.004 WAVES
            Costi minimi (non script)
        Esempi
            Vedi documentazione
                Account scambia solo BTC
                    let cooperPubKey = base58'BVqYXrapgJP9atQccdBPAgJPwHDKkh6A8'
                    let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
                    match tx {
                        case o: Order =>
                            sigVerify(tx.bodyBytes, tx.proofs[0], cooperPubKey ) && (o.assetPair.priceAsset == BTCId || o.assetPair.amountAsset == BTCId)
                        case _ => sigVerify(tx.bodyBytes, tx.proofs[0], cooperPubKey )
                    }
                Buy back ad uno specifico prezzo in WAVES
                    let myAssetId = base58'BVqYXrapgJP9atQccdBPAgJPwHDKkh6B9'
                    let cooperPubKey = base58'BVqYXrapgJP9atQccdBPAgJPwHDKkh6A8'
                    match tx {
                        case o: Order =>
                            o.assetPair.priceAsset == base58'' && o.assetPair.amountAsset == myAssetId && o.price == 500000 && o.amount == 1000 && o.orderType == Buy
                        case _ => sigVerify(tx.bodyBytes, tx.proofs[0], cooperPubKey )
                    }
        come associare uno script ad un account
            ...
        DataTransaction
            Da capire
Sembrano interessanti, l'impressione è che, forse, sono relativamente semplici da capire e implementare.
full member
Activity: 1064
Merit: 166
October 29, 2018, 02:32:59 AM
#85
Segnalo questo thread in inglese dove si tratta di testamenti ed è saltato fuori qualcosa di interessante di cui non ero a conoscenza https://bitcointalksearch.org/topic/how-to-make-a-crypto-testament-5052754

Il succo è: creando con un nuovo indirizzo ethereum un certo numero di smart contract in una rete di test e poi nella main net ethereum, questi avranno gli stessi indirizzi.

https://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed/761#761

Quote
The address for an Ethereum contract is deterministically computed from the address of its creator (sender) and how many transactions the creator has sent (nonce). The sender and nonce are RLP encoded and then hashed with Keccak-256.

Non la sapevo questa cosa degli indirizzi, ed è vero che potrebbe tornare utile  Cool

Per l'utilizzo che ne fà nel suo caso, forse avrebbe potuto bloccare il testamento usando il numero del blocco corrente ( 10 - 20 o 30 anni nel futuro contando un tempo di creazione per blocco di 10 minuti) e ritardando la scandenza nel caso fosse ancora in vita. Ci sono un sacco di modi magari piu semplici per fare un testamento.
newbie
Activity: 69
Merit: 0
October 28, 2018, 11:38:21 AM
#84
a dirla ll' inglese OMG
legendary
Activity: 2506
Merit: 1120
October 28, 2018, 05:16:03 AM
#83
Segnalo questo thread in inglese dove si tratta di testamenti ed è saltato fuori qualcosa di interessante di cui non ero a conoscenza https://bitcointalksearch.org/topic/how-to-make-a-crypto-testament-5052754

Il succo è: creando con un nuovo indirizzo ethereum un certo numero di smart contract in una rete di test e poi nella main net ethereum, questi avranno gli stessi indirizzi.

https://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed/761#761

Quote
The address for an Ethereum contract is deterministically computed from the address of its creator (sender) and how many transactions the creator has sent (nonce). The sender and nonce are RLP encoded and then hashed with Keccak-256.
E' per queste cose che adoro il modo crypto-blockchain.
E' come quando qualcuno scopre l'acqua calda Smiley (*)
EDIT: bisogna però osservare che ethereum ha già dato segni di non immutabilità delle regole.
EDIT2: (*) e scopre un utilizzo interessante dell'acqua calda ...
hero member
Activity: 784
Merit: 1416
October 28, 2018, 03:46:28 AM
#82
Segnalo questo thread in inglese dove si tratta di testamenti ed è saltato fuori qualcosa di interessante di cui non ero a conoscenza https://bitcointalksearch.org/topic/how-to-make-a-crypto-testament-5052754

Il succo è: creando con un nuovo indirizzo ethereum un certo numero di smart contract in una rete di test e poi nella main net ethereum, questi avranno gli stessi indirizzi.

https://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed/761#761

Quote
The address for an Ethereum contract is deterministically computed from the address of its creator (sender) and how many transactions the creator has sent (nonce). The sender and nonce are RLP encoded and then hashed with Keccak-256.
newbie
Activity: 69
Merit: 0
October 05, 2018, 02:47:39 AM
#81
grazie
full member
Activity: 1064
Merit: 166
October 04, 2018, 03:56:40 AM
#80
grazie makkara ...dai dei contributi davvero importanti. ma per caso sai come interfaccaire un token con un app android? vorrei creare un token rc20 e un semplice wallet app per scambiarlo

Non ne ho idea, su github potrebbe esserci qualcosa
newbie
Activity: 69
Merit: 0
October 01, 2018, 11:06:00 AM
#79
grazie makkara ...dai dei contributi davvero importanti. ma per caso sai come interfaccaire un token con un app android? vorrei creare un token rc20 e un semplice wallet app per scambiarlo
full member
Activity: 1064
Merit: 166
September 28, 2018, 06:52:38 AM
#78
Token ERC-721 o token non fungibili

A differenza dei token ERC-20, i quali non hanno differenze l’uno dall’altro, i token non fungibili hanno principalmente lo scopo di rappresentare il possesso di un un'entità con caratteristiche uniche.

Partendo da github ho trovato questa implementazione: https://github.com/m0t0k1ch1/ERC721-token-sample/tree/master/contracts che ho provveduto a modificare e semplificare per rendere più semplice la spiegazione e il funzionamento.
Avendo già illustrato in esempi precedenti come funzionano i token ERC-20 potrete notare come questi due standard condividono parte delle funzionalità.

Questa è l’interfaccia da implementare per usare lo standard ERC-721:

Code:

contract ERC721 {
    
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}



come potete vedere a prima vista è molto simile alla ERC-20 e, controllando in dettaglio noterete che tutte le operazioni che riguardano i token non “parlano” di quantità ma di un Id (_tokenId).



Definizione generale sulle informazioni che il token detiene e informazioni su chi li possiede:

Code:
string public constant name = "Tokenized Item";
  string public constant symbol = "NFTI";

  struct Token { // Definizione delle informazioni mantenute dal token
    address mintedBy;
    uint64 mintedAt;
    string description; /*Aggiunta allo scopo di rendere più comprensibile l’esempio, in realtà questo potrebbe essere un hash di un link IPFS o maggiori informazioni sul token senza incidere troppo sui costi derivanti dall’utilizzo delle informazioni all’interno dello smart contract*/
  }

  Token[] tokens; // Array dei token in esistenza

   //Mappature
  mapping (uint256 => address) public tokenIndexToOwner; //Token -> User
  mapping (address => uint256) ownershipTokenCount; //User -> Token
  mapping (uint256 => address) public tokenIndexToApproved; //Token -> User approvato a spendere il token

//Evento
  event Mint(address owner, uint256 tokenId, string description);

Funzioni interne sono per lo più simili a quelle di un ERC-20, gestiscono internamente le operazioni per tenere traccia di:
  • chi possiede un token
  • a chi appartiene un token
  • chi è autorizzato a spendere o muovere un token

tramite i mapping sopra citati.
Code:
function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
    return tokenIndexToOwner[_tokenId] == _claimant;
  }

  function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
    return tokenIndexToApproved[_tokenId] == _claimant;
  }

  function _approve(address _to, uint256 _tokenId) internal {
    tokenIndexToApproved[_tokenId] = _to;

    Approval(tokenIndexToOwner[_tokenId], tokenIndexToApproved[_tokenId], _tokenId);
  }

  function _transfer(address _from, address _to, uint256 _tokenId) internal {
    ownershipTokenCount[_to]++;
    tokenIndexToOwner[_tokenId] = _to;

    if (_from != address(0)) {
      ownershipTokenCount[_from]--;
      delete tokenIndexToApproved[_tokenId];
    }

    Transfer(_from, _to, _tokenId);
  }


è presente una funzione _mint per creare un nuovo token e assegnarnlo all’indirizzo specificato, che in questo caso, osservando la funzione pubblica mint coincide con chi esegue il metodo mint.
Code:
 function _mint(address _owner, string description) internal returns (uint256 tokenId) {
    Token memory token = Token({
      mintedBy: _owner,
      mintedAt: uint64(now),
      description: description
    });
    tokenId = tokens.push(token) - 1;

    Mint(_owner, tokenId, description);

    _transfer(0, _owner, tokenId);
  }


Queste sono le funzioni principali per testare la creazione e visualizzare delle informazioni del token tramite Remix (https://remix.ethereum.org):
Code:
 function mint(string description) external returns (uint256) {
    return _mint(msg.sender,description);
  }

  function getToken(uint256 _tokenId) external view returns (address mintedBy, uint64 mintedAt,string description) {
    Token memory token = tokens[_tokenId];

    mintedBy = token.mintedBy;
    mintedAt = token.mintedAt;
    description = token.description;
  }


Codice completo per test su Remix:

Se avete domande o volete chiarimenti sono disponibile.

Code:
pragma solidity ^0.4.18;

contract ERC721 {
    
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

contract NFTItem is ERC721 {
 
  string public constant name = "Tokenized Item";
  string public constant symbol = "NFTI";

  /*** DATA TYPES ***/

  struct Token {
    address mintedBy;
    uint64 mintedAt;
    string description;
  }

  Token[] tokens;

  mapping (uint256 => address) public tokenIndexToOwner;
  mapping (address => uint256) ownershipTokenCount;
  mapping (uint256 => address) public tokenIndexToApproved;

  event Mint(address owner, uint256 tokenId, string description);


  /*** INTERNAL FUNCTIONS ***/

  function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
    return tokenIndexToOwner[_tokenId] == _claimant;
  }

  function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
    return tokenIndexToApproved[_tokenId] == _claimant;
  }

  function _approve(address _to, uint256 _tokenId) internal {
    tokenIndexToApproved[_tokenId] = _to;

    Approval(tokenIndexToOwner[_tokenId], tokenIndexToApproved[_tokenId], _tokenId);
  }

  function _transfer(address _from, address _to, uint256 _tokenId) internal {
    ownershipTokenCount[_to]++;
    tokenIndexToOwner[_tokenId] = _to;

    if (_from != address(0)) {
      ownershipTokenCount[_from]--;
      delete tokenIndexToApproved[_tokenId];
    }

    Transfer(_from, _to, _tokenId);
  }

  function _mint(address _owner, string description) internal returns (uint256 tokenId) {
    Token memory token = Token({
      mintedBy: _owner,
      mintedAt: uint64(now),
      description: description
    });
    tokenId = tokens.push(token) - 1;

    Mint(_owner, tokenId, description);

    _transfer(0, _owner, tokenId);
  }


  /*** ERC721 IMPLEMENTATION ***/

  function totalSupply() public view returns (uint256) {
    return tokens.length;
  }

  function balanceOf(address _owner) public view returns (uint256) {
    return ownershipTokenCount[_owner];
  }

  function ownerOf(uint256 _tokenId) external view returns (address owner) {
    owner = tokenIndexToOwner[_tokenId];

    require(owner != address(0));
  }

  function approve(address _to, uint256 _tokenId) external {
    require(_owns(msg.sender, _tokenId));

    _approve(_to, _tokenId);
  }

  function transfer(address _to, uint256 _tokenId) external {
    require(_to != address(0));
    require(_to != address(this));
    require(_owns(msg.sender, _tokenId));

    _transfer(msg.sender, _to, _tokenId);
  }

  function transferFrom(address _from, address _to, uint256 _tokenId) external {
    require(_to != address(0));
    require(_to != address(this));
    require(_approvedFor(msg.sender, _tokenId));
    require(_owns(_from, _tokenId));

    _transfer(_from, _to, _tokenId);
  }

  function tokensOfOwner(address _owner) external view returns (uint256[]) {
    uint256 balance = balanceOf(_owner);

    if (balance == 0) {
      return new uint256[](0);
    } else {
      uint256[] memory result = new uint256[](balance);
      uint256 maxTokenId = totalSupply();
      uint256 idx = 0;

      uint256 tokenId;
      for (tokenId = 1; tokenId <= maxTokenId; tokenId++) {
        if (tokenIndexToOwner[tokenId] == _owner) {
          result[idx] = tokenId;
          idx++;
        }
      }
    }

    return result;
  }

  function mint(string description) external returns (uint256) {
    return _mint(msg.sender,description);
  }

  function getToken(uint256 _tokenId) external view returns (address mintedBy, uint64 mintedAt,string description) {
    Token memory token = tokens[_tokenId];

    mintedBy = token.mintedBy;
    mintedAt = token.mintedAt;
    description = token.description;
  }
}







full member
Activity: 1064
Merit: 166
September 27, 2018, 06:51:36 AM
#77
Tra qualche giorno, a grande richiesta,  arriva un nuovo e fantastico episodio sui token erc-721, completo di esempi e spiegazioni come al solito  Cool

newbie
Activity: 69
Merit: 0
July 21, 2018, 06:35:34 AM
#76
si ma se oggetto di speculazione possono scendere e salire ....quindi non soggetto a fluttuazioni
full member
Activity: 1064
Merit: 166
July 17, 2018, 11:19:02 AM
#75
Un altro soggetto che varrebbe la pena discutere o avere qualche esempio in questo thread, sarebbe qualcosa sui nuovi token non fungibili. Stavo giusto cominciando a leggere qualcosa a riguardo.

Concordo se vuoi scrivere qualche esempio, welcome  Wink io non li ho ancora guardati comunque mi interessa la cosa

sono incuriosito dai token stabili tipo eurt come fa a rimanere stabile ?


Semplicemente avranno un equivalente in € depositato da qualche parte a garanzia, tipo usdt, che poi sia vero o no non si sa. Angry
newbie
Activity: 69
Merit: 0
July 17, 2018, 03:57:46 AM
#74
sono incuriosito dai token stabili tipo eurt come fa a rimanere stabile ?
hero member
Activity: 784
Merit: 1416
July 15, 2018, 08:43:09 AM
#73
Un altro soggetto che varrebbe la pena discutere o avere qualche esempio in questo thread, sarebbe qualcosa sui nuovi token non fungibili. Stavo giusto cominciando a leggere qualcosa a riguardo.
hero member
Activity: 784
Merit: 1416
July 12, 2018, 04:46:38 AM
#72
Ottimo grazie, soluzione semplice e chiara, ora devo solo capire come è meglio impostare le cose, ma nel mio caso penso il gestore del servizio sblocca i token e l'utente li blocca.
full member
Activity: 1064
Merit: 166
July 12, 2018, 01:34:20 AM
#71
Gestire Lock & Unlock dei tokens

Partendo da qui: https://github.com/ConsenSys/Tokens/tree/master/contracts/eip20

Ho modificato il contratto per permettere di lockare i token, se noti ho messo dei commenti dove ho modificato il codice.

Ho creato una nuova variabile che contine la quantita dei token in lock:

Code:
mapping (address => uint256) public locked;

Aggiunto i controlli durante i trasferimenti per essere sicuri che ci siano abbastanza tokens disponibili per i trasferimenti, considerando l'ammontare in lock.

Aggiunti gli eventi nel momento in cui viene effettuato il lock e unlock:

Code:
   event Lock(address indexed _owner, uint256 _value);
    event Unlock(address indexed _owner, uint256 _value);

Aggiunto funzioni per effettuare lock/unlock e verificare quanti token si hanno in lock, il proprietario dei token in questo caso ha il potere di fare lock ed unlock ma è facilmente possibile cambiare il codice per permettere ad una terza parte di effettuare il solo unlock, lock o entrambi:

Code:
   function lock(uint256 _value) public returns (bool success){
        require(safeSub(balances[msg.sender], locked[msg.sender]) >= _value); // New check for token availability - Makkara
        locked[msg.sender] = _value;
        emit Lock(msg.sender, _value); // Raise event for locked tokens.
        return true;
    }
    
    function locked() public view returns (uint256 _value){
        return locked[msg.sender];
    }
    
    function unlock(uint256 _value) public returns (bool success){
        require(locked[msg.sender] >= _value);
        locked[msg.sender]-=_value;
        return true;
    }

Questo è il contratto completo pronto per l'uso. Ho fatto alcuni test e funziona, ma non posso garantire che sia esente da problemi, o possa soffrire in futuro per via di eventuali bug o exploit Smiley
Code:
// Abstract contract for the full ERC 20 Token standard
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
pragma solidity ^0.4.21;

contract SafeMath {
  function safeMul(uint256 a, uint256 b) internal returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function safeSub(uint256 a, uint256 b) internal returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function safeAdd(uint256 a, uint256 b) internal returns (uint256) {
    uint256 c = a + b;
    assert(c>=a && c>=b);
    return c;
  }

  function assert(bool assertion) internal {
    if (!assertion) throw;
  }
}

contract EIP20Interface {
    /* This is a slight change to the ERC20 base standard.
    function totalSupply() constant returns (uint256 supply);
    is replaced with:
    uint256 public totalSupply;
    This automatically creates a getter function for the totalSupply.
    This is moved to the base contract since public getter functions are not
    currently recognised as an implementation of the matching abstract
    function by the compiler.
    */
    /// total amount of tokens
    uint256 public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) public view returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) public returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) public returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);

    /// @notice `msg.sender` locks the amount of `_value` tokens
    /// @param _value The amount of tokens to be locked
    /// @return Whether the lock was successful or not
    function lock(uint256 _value) public returns (bool success);
    
    /// @notice `msg.sender` check the amount of tokens locked
    /// @return The amount of tokens locked
    function locked() public view returns (uint256 _value);

    /// @notice `msg.sender` unlocks the amount of `_value` tokens
    /// @param _value The amount of tokens to be unlocked
    /// @return Whether the unlock was successful or not
    function unlock(uint256 _value) returns (bool success);

    // solhint-disable-next-line no-simple-event-func-name
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    event Lock(address indexed _owner, uint256 _value);
    event Unlock(address indexed _owner, uint256 _value);
}


contract EIP20 is EIP20Interface, SafeMath {

    uint256 constant private MAX_UINT256 = 2**256 - 1;
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;
    mapping (address => uint256) public locked;
    /*
    NOTE:
    The following variables are OPTIONAL vanities. One does not have to include them.
    They allow one to customise the token contract & in no way influences the core functionality.
    Some wallets/interfaces might not even bother to look at this information.
    */
    string public name;                   //fancy name: eg Simon Bucks
    uint8 public decimals;                //How many decimals to show.
    string public symbol;                 //An identifier: eg SBX

    function EIP20(
        uint256 _initialAmount,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol
    ) public {
        balances[msg.sender] = _initialAmount * 10 ** uint256(_decimalUnits);               // Give the creator all initial tokens
        totalSupply = _initialAmount * 10 ** uint256(_decimalUnits);                        // Update total supply
        name = _tokenName;                                   // Set the name for display purposes
        decimals = _decimalUnits;                            // Amount of decimals for display purposes
        symbol = _tokenSymbol;                               // Set the symbol for display purposes
        locked[msg.sender] = 0;  //Initialize locked tokens for the creator - Makkara
    }

    function transfer(address _to, uint256 _value) public returns (bool success) {
        require(safeSub(balances[msg.sender], locked[msg.sender]) >= _value); // New check for token availability - Makkara
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        emit Transfer(msg.sender, _to, _value); //solhint-disable-line indent, no-unused-vars
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        uint256 allowance = allowed[_from][msg.sender];
        require(safeSub(balances[_from], locked[_from]) >= _value && allowance >= _value);
        balances[_to] += _value;
        balances[_from] -= _value;
        if (allowance < MAX_UINT256) {
            allowed[_from][msg.sender] -= _value;
        }
        emit Transfer(_from, _to, _value); //solhint-disable-line indent, no-unused-vars
        return true;
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        require(safeSub(balances[msg.sender], locked[msg.sender]) >= _value); // New check for token availability - Makkara
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value); //solhint-disable-line indent, no-unused-vars
        return true;
    }

    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }
    
    function lock(uint256 _value) public returns (bool success){
        require(safeSub(balances[msg.sender], locked[msg.sender]) >= _value); // New check for token availability - Makkara
        locked[msg.sender] = _value;
        emit Lock(msg.sender, _value); // Raise event for locked tokens.
        return true;
    }
    
    function locked() public view returns (uint256 _value){
        return locked[msg.sender];
    }
    
    function unlock(uint256 _value) public returns (bool success){
        require(locked[msg.sender] >= _value);
        locked[msg.sender]-=_value;
        emit Unlock(msg.sender, _value); // Raise event for unlocked tokens.
        return true;
    }
    
}
full member
Activity: 1064
Merit: 166
July 10, 2018, 12:29:52 AM
#70
Chiedo qui se qualcuno ha qualche idea:

Come si potrebbe sviluppare un sistema che blocca una certa quantità di token?

Mi spiego meglio: imagginiamo che per accedere ad un servizio al posto di pagare con dei token, mi venga richiesto di avere una certa quantità di token e l'obbligo di tenerli bloccati fino a che il servizio non termina. Qualche idea su come impostare gli smart contract a grandi linee?

problema interessante  Cool proverò a guardarci un pò appena ho tempo
hero member
Activity: 784
Merit: 1416
July 09, 2018, 04:25:30 PM
#69
Chiedo qui se qualcuno ha qualche idea:

Come si potrebbe sviluppare un sistema che blocca una certa quantità di token?

Mi spiego meglio: imagginiamo che per accedere ad un servizio al posto di pagare con dei token, mi venga richiesto di avere una certa quantità di token e l'obbligo di tenerli bloccati fino a che il servizio non termina. Qualche idea su come impostare gli smart contract a grandi linee?
newbie
Activity: 15
Merit: 0
June 23, 2018, 08:40:30 PM
#68
Benvenuto a bordo  Cool, se hai appena cominciato e non vuoi preoccuparti troppo dell interfaccia ti consiglio di usare semplicemente metamask e remix sulla rete ropsten, trovi i link nel primo post

Grazie!

Diciamo che mi piacciono le cose difficili, quindi ho settato tutto offline, quindi ganache, truffle, solc, web3 e ovvimente metamask per la gestione delle tx su web. Devo dire che ci è voluto un pò, però poi capito il meccanismo è relativamente semplice.
Ho fatto anche qualche test e funziona tutto, ora devo metterci le mani seriamente per un progettino un po più complesso.

Poi una volta testato "offline" devo passarlo per forza su ropsten e a quel punto è probabile che vi dia fastidio qui  Cheesy
full member
Activity: 1064
Merit: 166
June 22, 2018, 11:54:46 AM
#67
Benvenuto a bordo  Cool, se hai appena cominciato e non vuoi preoccuparti troppo dell interfaccia ti consiglio di usare semplicemente metamask e remix sulla rete ropsten, trovi i link nel primo post
newbie
Activity: 15
Merit: 0
June 21, 2018, 03:45:02 PM
#66
Ciao a tutti.

Felice di aver trovato questo topic!

Ho iniziato da poco a smanettare con gli smart contract anche io.

L'approccio è un po particolare, ma credo che basti cominciare ad entrare nell'ottica del sistema.
Ho trovato molto utili dei link trovati sotto un video di youtube.
https://www.youtube.com/watch?v=gSQXq2_j-mw

Sotto ci sono diversi link anche al repository github con tutto il materiale del video.

Comunque grazie a tutti, ho trovato in 2 minuti milioni di info utili in un unico post!
full member
Activity: 1064
Merit: 166
June 19, 2018, 06:26:13 AM
#65
devi aggiungere al tuo contratto questa funzione:

Code:
   function () payable{

        // Qui dentro poi usi msg.sender per sapere chi e' il destinatario dei token e msg.value per calcolare quanti token spedirgli


        LogReceivedFunds(msg.sender, msg.value);


    }

Una volta che dichiari questa funzione e' possibile mandare direttamente gli ETH allo smart contract (come succede per le ICO), senza il bisogno per l'utente di chiamare una funzione specifica dello smart contract.

Se invece vuoi avere una funzione chiamabile che accetta ETH devi usare:

Code:
function pay() payable
        public
        returns(bool success)
    {
        //Operazioni ...

        LogReceivedFunds(msg.sender, msg.value);
        return true;
    }

Questa e' un po' piu complicata da usare lato utente
newbie
Activity: 69
Merit: 0
June 18, 2018, 02:49:41 PM
#64
ecco perche uso la rete testnet
io non capisco come far comunicare due contratti tipo uin token e uno che redistribuisce i token automaticamente


Ti basta inserire una funzione del genere nello smart contract del tuo token, tipo nell'esempio che avevo fatto qualche posto fa per la distribuzione automatica:

Eseguibile solo dal creatore del contratto e passa i token specificati (_value) ai proprietari degli indirizzi in ingresso
Code:
function distributeToken(address[] addresses, uint256 _value) onlyOwner {
     for (uint i = 0; i < addresses.length; i++) {
         balances[owner] -= _value;
         balances[addresses[i]] += _value;
         Transfer(owner, addresses[i], _value);
     }
}

Per testarla da remix passa gli indirizzi in questo formato:

Code:
["0xindirizzo_1", "0xindirizzo_2", "0xindirizzo_3"]




se tengo un contratto già in test genero altro contratto che redistribuisce il n 100 tokenA a tutti gli indirizzi che inviano a questo contratto tpo 0.01 eth quale funzione uso?
full member
Activity: 1064
Merit: 166
June 17, 2018, 06:18:47 AM
#63
Si parla molto degli smart contract di EOS ma sembra che anche Ripple ha tirato su un bel sistema:



Qui trovate degli articoli che spiegano un po il funzionamento:

https://xrpcommunity.blog/codius-smart-contracts-done-right/

https://medium.com/coil/codius-smart-contracts-made-from-containers-b3b16c3e3890


Alcuni punti chiave:

Quote
Codius works differently than smart contracts in Bitcoin or Ethereum. The contracts run on independent hosts without an underlying blockchain, similar to traditional hosting. This allows them to interact with any service or API, scale infinitely, and read from or write to any blockchain

Quote
Another biggest difference, perhaps one of the most important, is that Codius can keep secrets while Ethereum can't. That means Codius can, for example, control a bitcoin wallet while an Ethereum smart contract can't
full member
Activity: 1064
Merit: 166
June 12, 2018, 02:18:53 PM
#62
Buongiorno,
giusto per cazzeggio volevo provare a inviare dei token B a tutti gli indirizzi che possiedono il token A. Avete spunti?  Grin
Grazie

In pratica non c'è un modo semplice per farlo, una volta che hai deciso a che blocco prendere lo snapshot, dovresti andare a vederti gli eventi Transfer lanciati dal contratto del token A.

Quindi:

Ti passi tutti gli eventi Transfer che vanno dal blocco di creazione del token al blocco dello snapshot, a mano a mano dovresti tenere il conto dei bilanci fino ad arrivare ad avere una lista completa con indirizzo - quantità di tokens.

Altrimenti passi tutti gli eventi e salvi tutti gli indirizzi che incontri, poi con web3js dovrebbe essere possibile passare come parametro il numero del blocco del tuo snapshot e verificare in quel momento il saldo token.

Buona fortuna  Wink

EDIT: Piggy aveva postato un esempio e li leggeva gli eventi:

Code:
function checkOwnershipEvents() {
                  document.getElementById("response3").innerHTML = ""
                 
                  var pf = web3.eth.contract(scAbi).at(scAddress);
                  // watch for an event with {some: 'args'}
                  var myEvent = pf.ProofOfOwnership({ some: 'args' }, { fromBlock: 0, toBlock: 'latest' });
                  // would get all past logs again.
                  var myResults = myEvent.get(function (error, logs) {
                      console.log(logs);
                      var event1;
                      for (var i = 0; i < logs.length ; i++) {
                          event1 = JSON.stringify(logs[i].args);
                          document.getElementById("response3").innerHTML += 'Proof of ownership received: ' + JSON.stringify(event1) + '
'
                      }
                  });
              }

sr. member
Activity: 292
Merit: 250
June 12, 2018, 11:19:24 AM
#61
Buongiorno,
giusto per cazzeggio volevo provare a inviare dei token B a tutti gli indirizzi che possiedono il token A. Avete spunti?  Grin
Grazie
full member
Activity: 1064
Merit: 166
June 01, 2018, 12:14:31 AM
#60
Tongue ;)grazie ma quindi questi consentono di trasferre automaticamente i token a chi invia eth
?

si, basterebbe aggiungerci la parte dove lo smart contract riceve gli eth, che qui non c'è. Appena ho un po di tempo vedo di fare un esempio, perchè lo smart contract non può ricevere direttamente ethereum se non è abilitato a farlo.
newbie
Activity: 69
Merit: 0
May 31, 2018, 04:58:02 PM
#59
 Tongue ;)grazie ma quindi questi consentono di trasferre automaticamente i token a chi invia eth
?
full member
Activity: 1064
Merit: 166
May 28, 2018, 08:03:05 AM
#58
Come gestire token in uno smart contract:

Dopo tanta pazienza sono riuscito a capire come funzionano i trasferimenti, quindi cerco di spiegarvi come funziona il tutto, come al solito con esempi che potete provare da voi.

Contratto:

Code:
pragma solidity ^0.4.4;

contract SafeMath {
  function safeMul(uint a, uint b) internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function safeSub(uint a, uint b) internal returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function safeAdd(uint a, uint b) internal returns (uint) {
    uint c = a + b;
    assert(c>=a && c>=b);
    return c;
  }

  function assert(bool assertion) internal {
    if (!assertion) throw;
  }
}

contract Token {
  
  function balanceOf(address _owner) constant returns (uint256 balance) {}
  function transfer(address _to, uint256 _value) returns (bool success) {}
  function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
  function approve(address _spender, uint256 _value) returns (bool success) {}
}


contract Banca is SafeMath{
  mapping (address => mapping (address => uint)) public tokens; //questo mappa un indirizzo di un token con un la mappatura di un indirizzo di un proprietario e la quantità di quei tokens
  
  event Deposit(address token, address user, uint amount, uint balance);
  event Withdraw(address token, address user, uint amount, uint balance);
  
  function Banca(){
  
  }
  
  function depositoToken(address token, uint amount) {
    if (token==0) throw;
    if (!Token(token).transferFrom(msg.sender, this, amount)) throw;
    tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount);
    Deposit(token, msg.sender, amount, tokens[token][msg.sender]);
  }
  
  function prelievoToken(address token, uint amount) {
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(msg.sender, amount)) throw;
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }
}  
 

Contratto token per i test:
https://github.com/ConsenSys/Tokens/tree/master/contracts/eip20


Come depositare i token nel vostro smart contract?

I tokens possono essere spediti direttamente all’indirizzo dello smart contract con il vostro client preferito, però questo modo non permette allo smart contract di tenere traccia di chi ha mandato i token, quindi non è ottimale. Per il risolvere il problema dobbiamo prima mappare un indirizzo di un token con la mappatura di un indirizzo di un proprietario e la quantità di tokens:

Code:
mapping (address => mapping (address => uint)) public tokens;

e permettere allo smart contract di spendere parte dei nostri token, questo avviene tramite il metodo approve del contratto del token che volete trasferire. Interfacciandosi direttamente al contratto del token basta chiamare:
   
Code:
approve(address _spender, uint256 _value)

A questo punto il contratto può spendere parte dei vostri token, fino a raggiungere l’ammontare specificato. In questo modo lo smart contract prende in consegna i tokens e può salvare il mittente e la quantità di tokens depositati tramite la seguente funzione:

Code:
function depositoToken(address token, uint amount) {
    if (token==0) throw;
    if (!Token(token).transferFrom(msg.sender, this, amount)) throw;
    tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount);
    Deposit(token, msg.sender, amount, tokens[token][msg.sender]);
  }


Come prelevare i token dal vostro smart contract?

Per prelevare i token dallo smart contract non dobbiamo far altro che chiamare dal nostro smart contract la funzione transfer del contratto del token:

Code:
function transfer(address _to, uint256 _value) returns (bool success) {}

Che compare nella nostra funzione per il prelievo:

Code:
function prelievoToken(address token, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(msg.sender, amount)) throw;
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }










Piccola parentesi:
In un primo momento per generare un token velocemente avevo utilizzato il codice presente qui, senza guardarci troppo: https://www.ethereum.org/token

Come potete vedere questo in questo contratto la funzione transfer non ritorna un boolean, quindi in questo caso quando chiamo la funzione transfer dal mio contratto mi ritorna sempre false e metamask mi avvisa che c’e’ un errore nel contratto, senza specificare dove. Dopo un pò che ci ho sbattuto la testa mi sono reso conto del problema e preso un contratto standard da qui https://github.com/ConsenSys/Tokens/tree/master/contracts/eip20 anche se per risolvere il problema nel vecchio contratto basta aggiungere:

Code:
   function transfer(address _from, address _to, uint256 _value) public returns (bool success) {
        _transfer(_from, _to, _value);
        return true;
    }

Questo è tutto. Se qualcosa non ho chiaro chiedete pure.
newbie
Activity: 69
Merit: 0
May 25, 2018, 08:59:43 AM
#57
la funzione di redistribuzione è un casotto hahaha alemno per me
full member
Activity: 1064
Merit: 166
May 24, 2018, 06:37:09 AM
#56
in questi giorni sto cercando di capire come mandare token ad uno smart contract e poi fare in modo di riprenderli, la prima parte è piuttosto semplice e ci sono diversi modi per farlo ma la seconda mi sta facendo smadonnare non poco.
Appena riesco a capire per bene il tutto metto qua un esempio funzionante :/
full member
Activity: 1064
Merit: 166
May 16, 2018, 10:10:44 AM
#55
ho sviluppato diversi smartcontract in Solidity, e Golang, chiedi pure in pvt o email

[email protected]

Ciao quali sono i vantaggi nello sviluppare in Golang è più semplice rispetto ad usare Solidity ?
newbie
Activity: 22
Merit: 0
May 15, 2018, 10:32:08 PM
#54
ho sviluppato diversi smartcontract in Solidity, e Golang, chiedi pure in pvt o email

[email protected]
newbie
Activity: 69
Merit: 0
May 08, 2018, 12:34:48 PM
#53
bankera utilizzera lo standard ERC223 Contract
https://blog.bankera.com/2018/05/07/why-is-the-bnk-token-unique/
di seguito il link per trovare il contratto
https://github.com/Bankera-token/BNK-ETH-Contract

erc223 pare abbia più alti standard di sicurezza e verifica degli errori
newbie
Activity: 38
Merit: 0
May 08, 2018, 11:39:41 AM
#52
qualcuno sta studiando eos?
Domani se riesco scrivo un altro entusiasmante esempio per smart contract  Shocked

Aspetto con ansia!  Grin
legendary
Activity: 3766
Merit: 1742
Join the world-leading crypto sportsbook NOW!
May 08, 2018, 03:44:20 AM
#51
Bello cryptozombies! Salvato nei preferiti
full member
Activity: 1064
Merit: 166
May 07, 2018, 10:10:28 AM
#50
qualcuno sta studiando eos?

No, hai qualche link per vedere un pò cosa offre rispetto ad ethereum? Domani se riesco scrivo un altro entusiasmante esempio per smart contract  Shocked
newbie
Activity: 69
Merit: 0
May 07, 2018, 04:01:14 AM
#49
qualcuno sta studiando eos?
newbie
Activity: 38
Merit: 0
May 05, 2018, 06:40:23 PM
#48
Ottimo thread per esempi, lascio qua una robetta che avevo proposto su meta e per la quale ho preso pesci in faccia  Undecided, è comunque un esempio completo, con tanto di interfaccia web.

Tutte le istruzioni e codice sono qui:
https://bitcointalksearch.org/topic/m.36022761


Complimenti Piggy!
full member
Activity: 1064
Merit: 166
May 04, 2018, 12:46:04 PM
#47
Ottimo thread per esempi, lascio qua una robetta che avevo proposto su meta e per la quale ho preso pesci in faccia  Undecided, è comunque un esempio completo, con tanto di interfaccia web.

Tutte le istruzioni e codice sono qui:
https://bitcointalksearch.org/topic/m.36022761


hero member
Activity: 784
Merit: 1416
May 04, 2018, 04:46:37 AM
#46
Ottimo thread per esempi, lascio qua una robetta che avevo proposto su meta e per la quale ho preso pesci in faccia  Undecided, è comunque un esempio completo, con tanto di interfaccia web.

Tutte le istruzioni e codice sono qui:
https://bitcointalksearch.org/topic/m.36022761
full member
Activity: 1064
Merit: 166
May 01, 2018, 06:31:29 AM
#45
Qualcuno ha già' provato Ganache? Permette di creare una chain Ethereum personale dove testare tutto quello che serve. In più' ha anche il block explorer.

http://truffleframework.com/ganache/

Ne ho sentito parlare bene ma per il momento faccio ancora tutto da remix, non sono ancora arrivato al punto di avere un interfaccia "seria". Ho notato che su cryptozombie c'è anche una parte per l'UI, magari comincio a vedere da li.

Aggiunti i nuovi link che hai pubblicato
newbie
Activity: 38
Merit: 0
April 29, 2018, 07:37:33 PM
#44
ma scusate ...uno scambio di gattini mi sembra limitato ...potrebbe associarsi al token un auto ..una targa..o un bene infungibile giusto?



Lol. CryptoKitties e' il progetto più geniale di sempre. Sai quanti milioni sono stati spesi dagli utenti per comprare sti cazzo di crypto gatti?

https://www.cnbc.com/2017/12/06/meet-cryptokitties-the-new-digital-beanie-babies-selling-for-100k.html

Oltretutto se guardi sui vari profili c'e' gente che ha oltre centinaia di k $ di cryptogatti... il che fa riflettere. Alla fine sono solo token ERC721 generati da uno smartcontract che in base ad alcuni valori creano un' IMMAGINE di un gatto di colore diverso.

Considerando che il cryptogatto più caro e' stato venduto per centomila dollari...
newbie
Activity: 38
Merit: 0
April 28, 2018, 06:34:21 PM
#43
Qualcuno ha già' provato Ganache? Permette di creare una chain Ethereum personale dove testare tutto quello che serve. In più' ha anche il block explorer.

http://truffleframework.com/ganache/
newbie
Activity: 69
Merit: 0
April 28, 2018, 04:23:40 PM
#42
WOO ECCELLENTE QUI COME HO CAPITO SI STRUTTURA PROPRIO UN NUOVA CHAIN INTERESSANTE
newbie
Activity: 38
Merit: 0
April 28, 2018, 11:16:26 AM
#41

Considera che in questo caso, partendo dai dati della transazione(input data qui ad esempio) è possibile risalire al contenuto della variabile pass, quindi la seguente operazione non è sicura:

Code:
   
function setPass(string pass) {
        uint pass_cryptata = uint(keccak256(pass));
...
}

Ah ok questo non lo sapevo. Quindi in tal caso di dovrebbe criptare il contenuto prima offchain, inviare il contenuto già' criptato, e conservare la chiave offchain.


in pratica c'è questo per fare quello che vuoi https://ipfs.io/, però devi avere un server dove farlo girare è un altra cosa che ho nella lista "da guardare"  Smiley



In tal caso comunque la chiave pubblica la dovrei conservare io?
Comunque tirare su il server IPFS ci metti un secondo, la problematica sta più su come effettivamente utilizzarlo con Blockchain.


Super interessante. Praticamente lo si può' usare come storage decentralizzato? Cioè' invio un contenuto hashato, ok, ma per riprenderlo mi basta avere questo hash? Quindi teoricamente chiunque disponga di questo hash può' vederne il contenuto? Dovrei quindi rinviare il contenuto criptato dal quale ipfs genera un hash per ovviare a questo problema?

Qua' c'e' un tutorial non male
https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c


Certo che Blockchain + IPFS e' qualcosa di veramente potente.
full member
Activity: 1064
Merit: 166
April 28, 2018, 07:08:56 AM
#40
Dal momento che in uno smart contract e' impossibile nascondere qualcosa, nel caso non si volesse rendere pubblica una variabile e' necessario criptarla. Qualcuno ha già' avuto modo di provare? Esiste qualche soluzione decentralizzata?

Crypto le mie variabili all'interno dello smart contract, la chiave privata la tengo io, andrebbe quindi salvata "off chain". Il punto critico qua sarei io (in caso di minacce/corruzione potrei dare la chiave privata).


in pratica c'è questo per fare quello che vuoi https://ipfs.io/, però devi avere un server dove farlo girare è un altra cosa che ho nella lista "da guardare"  Smiley


Considera che in questo caso, partendo dai dati della transazione(input data qui ad esempio) è possibile risalire al contenuto della variabile pass, quindi la seguente operazione non è sicura:

Code:
   
function setPass(string pass) {
        uint pass_cryptata = uint(keccak256(pass));
...
}
newbie
Activity: 38
Merit: 0
April 27, 2018, 02:33:25 PM
#39
Dal momento che in uno smart contract e' impossibile nascondere qualcosa, nel caso non si volesse rendere pubblica una variabile e' necessario criptarla. Qualcuno ha già' avuto modo di provare? Esiste qualche soluzione decentralizzata?

Crypto le mie variabili all'interno dello smart contract, la chiave privata la tengo io, andrebbe quindi salvata "off chain". Il punto critico qua sarei io (in caso di minacce/corruzione potrei dare la chiave privata).
full member
Activity: 1064
Merit: 166
April 27, 2018, 11:13:59 AM
#38
Comunque il capitolo 5 di Cryptozombies.io spiega molto bene come crearne uno.

Effettivamente, è fatto bene, sto provando un po anche io.
newbie
Activity: 38
Merit: 0
April 27, 2018, 06:22:31 AM
#37
Comunque il capitolo 5 di Cryptozombies.io spiega molto bene come crearne uno.
full member
Activity: 1064
Merit: 166
April 27, 2018, 03:52:55 AM
#36
ma scusate ...uno scambio di gattini mi sembra limitato ...potrebbe associarsi al token un auto ..una targa..o un bene infungibile giusto?



si una qualsiasi cosa che ha un valore, potrebbe rappresentare il contratto di proprieta di una casa o auto.
newbie
Activity: 69
Merit: 0
April 27, 2018, 03:34:04 AM
#35
ma scusate ...uno scambio di gattini mi sembra limitato ...potrebbe associarsi al token un auto ..una targa..o un bene infungibile giusto?

full member
Activity: 1064
Merit: 166
April 27, 2018, 12:35:34 AM
#34
Si certo girano su Eth. Ti lascio questo articolo che sicuramente lo spiega meglio:

https://etherevolution.eu/token-non-fungibili-non-solo-gattini/

Praticamente si possono rappresentare tutti quegli asset non fungibili. Il limite ovviamente e' solo la propria immaginazione.

stavo leggendo un articolo qualche giorno fa, interessante, ma non ho provato ancora niente in dettaglio.

Con questo token per esempio in giochi online finalmente la gente potrebbe possedere realmente i pixel sullo schermo Grin
newbie
Activity: 38
Merit: 0
April 26, 2018, 05:10:52 PM
#33
Si certo girano su Eth. Ti lascio questo articolo che sicuramente lo spiega meglio:

https://etherevolution.eu/token-non-fungibili-non-solo-gattini/

Praticamente si possono rappresentare tutti quegli asset non fungibili. Il limite ovviamente e' solo la propria immaginazione.
newbie
Activity: 69
Merit: 0
April 26, 2018, 02:43:35 PM
#32
ma girano sempre su eth?
newbie
Activity: 69
Merit: 0
April 26, 2018, 02:41:01 PM
#31
qui stiamo ancora ai 20 hahahahah spiegati
newbie
Activity: 38
Merit: 0
April 26, 2018, 12:11:09 PM
#30
Wow mi rendo conto solo adesso delle enormi potenzialità' dei nuovi token ERC721, davvero pazzesco. Qualcuno ha già' provato a crearne qualcuno?
newbie
Activity: 38
Merit: 0
April 26, 2018, 06:24:09 AM
#29
Secondo me gia' fare solo 2 o 3 volte https://cryptozombies.io/ ti da un'infarinatura più che dignitosa.

Comunque esatto chi vuole incolla il codice del suo smart contract qua e lo si commenta/corregge ecc.

Tanto si e' visto che telegram per queste cose non e' molto produttivo.
full member
Activity: 1064
Merit: 166
April 26, 2018, 05:21:45 AM
#28
ma nenche io ho molto tempo ma per cominciare...solo nei ritagli di tempo..poi chissa

se hai un idea su un piccolo progetto si potrebbe sviluppare qui a tempo perso a scopo didattico
newbie
Activity: 69
Merit: 0
April 26, 2018, 04:36:12 AM
#27
ma nenche io ho molto tempo ma per cominciare...solo nei ritagli di tempo..poi chissa
full member
Activity: 1064
Merit: 166
April 26, 2018, 01:36:04 AM
#26
perchè non organizziamo un gruppetto per studiare meglio implementazione smart contract per eth e eos? nella programmazione il gruppo è fondamentale da soli è impossibile a meno che non sei una testa quadra come buterin...e dubito che abbia sviluppato tutto da solo..

io personalmente non ho molto tempo da dedicarci, ma magari qualcuno qui può.

Sto guardando altre cose interessanti nel frattempo, tra qualche giorno metto giù qualche altro esempio   Smiley
newbie
Activity: 69
Merit: 0
April 25, 2018, 03:43:46 AM
#25
perchè non organizziamo un gruppetto per studiare meglio implementazione smart contract per eth e eos? nella programmazione il gruppo è fondamentale da soli è impossibile a meno che non sei una testa quadra come buterin...e dubito che abbia sviluppato tutto da solo..
full member
Activity: 1064
Merit: 166
April 24, 2018, 02:04:47 AM
#24
Qualcuno conosce OpenZeppelin? Dovrebbe essere una libreria per scrivere smart contract sicuri. Oltretutto nei servizi che svolgono e' presente anche l'audit del tuo codice...

Interessante, quando lo smart contract diventa complesso penso che sia praticamente impossibile evitare problemi, piccoli o grossi che siano
newbie
Activity: 38
Merit: 0
April 23, 2018, 09:53:23 AM
#23
Qualcuno conosce OpenZeppelin? Dovrebbe essere una libreria per scrivere smart contract sicuri. Oltretutto nei servizi che svolgono e' presente anche l'audit del tuo codice...
full member
Activity: 1064
Merit: 166
April 23, 2018, 06:25:16 AM
#22
ecco perche uso la rete testnet
io non capisco come far comunicare due contratti tipo uin token e uno che redistribuisce i token automaticamente


Ti basta inserire una funzione del genere nello smart contract del tuo token, tipo nell'esempio che avevo fatto qualche posto fa per la distribuzione automatica:

Eseguibile solo dal creatore del contratto e passa i token specificati (_value) ai proprietari degli indirizzi in ingresso
Code:
function distributeToken(address[] addresses, uint256 _value) onlyOwner {
     for (uint i = 0; i < addresses.length; i++) {
         balances[owner] -= _value;
         balances[addresses[i]] += _value;
         Transfer(owner, addresses[i], _value);
     }
}

Per testarla da remix passa gli indirizzi in questo formato:

Code:
["0xindirizzo_1", "0xindirizzo_2", "0xindirizzo_3"]

newbie
Activity: 69
Merit: 0
April 23, 2018, 05:08:55 AM
#21
ecco perche uso la rete testnet
io non capisco come far comunicare due contratti tipo uin token e uno che redistribuisce i token automaticamente
full member
Activity: 1064
Merit: 166
April 23, 2018, 01:10:28 AM
#20
io ho capito come registrare un o smart contract su rete eth sia su testnet ...sto cercando prima di capire come fare relazionare il contratto ma vedo che voi a sviluppo siete avantissimo rispetto a me ...vogliamo creare un gruppo di sviluppo?

se hai qualche idea esponila pure qui, entro i limiti di tempo conoscenze ti si può dare una mano 


Ho appena letto questo articolo http://www.cryptominando.it/2018/04/17/creare-uno-smart-contract-solidity/ che mi sembra essere buono a livello di contenuti per neofiti, cioè "for dummies", come programmatore che ne pensi?

si va bene come guida introduttiva per capire come muoversi, aggiungo alla lista dei link



Grazie Makkara, molto utile web3ethestimategas esattamente quello che cercavo.

Mi chiedevo cosa succede nel caso in cui si dovessero mandare al contratto meno o più' Ethereum del necessario... Grazie!

Questa è una questione che non mi è ancora ben chiara e mi dovrei informare, alcune volte ad esempio metamask mi avvisa subito che se imposto un valore del gas troppo alto la transazione fallirà (chiamando uno smart contract).

Comunque fai attenzione perchè a quanto pare in generale è possibile bruciare parecchi ETH in gas per errore, ci sono tanti casi come questo:
https://www.reddit.com/r/ethtrader/comments/7io2d3/someone_used_22_ether_10k_for_a_single_transaction/
newbie
Activity: 38
Merit: 0
April 22, 2018, 09:35:18 AM
#19
Se ho capito bene qualcosa del genere:

Per la lista assumo che sia così:
Code:
mapping (address => bool) whiteList;

La funzione dove controlli se il chiamante è nella lista:
Code:
  function doSomething() {
        // recupera la lista whiteList dall altro smart contract
        
        if (whiteList[msg.sender] == false) throw;

        // fai qualcosa
    }

Se la funzione che chiami internamente al tuo contratto non apporta modifiche non dovrebbe costare niente chiamarla, comunque in generale il chiamante paga tutto il gas per le operazioni che vengono eseguite.

Per verificare il costo da javascript, quindi nella tua applicazione, c'è questo, in pratica simula l'esecuzione e ti dice quanto gas serve, comunque non ho ancora sperimentato:

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethestimategas


Grazie Makkara, molto utile web3ethestimategas esattamente quello che cercavo.

Mi chiedevo cosa succede nel caso in cui si dovessero mandare al contratto meno o più' Ethereum del necessario... Grazie!
jr. member
Activity: 58
Merit: 1
April 22, 2018, 08:28:54 AM
#18
quanti di voi hanno esperienza di programmazione ad oggetti c++etc . inoltre terrei d'occhio eos che pare sia più semplice di eth .


io faccio il programmatore come lavoro, ovviamente aiuta, ma da quello che vedo l'ottica in cui devi entrare quando scrivi uno smart contract è leggermente diversa.

Può essere che nel futuro comparirà qualcos'altro meglio di ethereum a livello di SC, siamo solo all'inizio.  Cool


ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Potresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d.

aggiunti
Ho appena letto questo articolo http://www.cryptominando.it/2018/04/17/creare-uno-smart-contract-solidity/ che mi sembra essere buono a livello di contenuti per neofiti, cioè "for dummies", come programmatore che ne pensi?
newbie
Activity: 69
Merit: 0
April 22, 2018, 03:35:24 AM
#17
io ho capito come registrare un o smart contract su rete eth sia su testnet ...sto cercando prima di capire come fare relazionare il contratto ma vedo che voi a sviluppo siete avantissimo rispetto a me ...vogliamo creare un gruppo di sviluppo?
full member
Activity: 1064
Merit: 166
April 22, 2018, 01:20:58 AM
#16
Se ho capito bene qualcosa del genere:

Per la lista assumo che sia così:
Code:
mapping (address => bool) whiteList;

La funzione dove controlli se il chiamante è nella lista:
Code:
  function doSomething() {
        // recupera la lista whiteList dall altro smart contract
        
        if (whiteList[msg.sender] == false) throw;

        // fai qualcosa
    }

Se la funzione che chiami internamente al tuo contratto non apporta modifiche non dovrebbe costare niente chiamarla, comunque in generale il chiamante paga tutto il gas per le operazioni che vengono eseguite.

Per verificare il costo da javascript, quindi nella tua applicazione, c'è questo, in pratica simula l'esecuzione e ti dice quanto gas serve, comunque non ho ancora sperimentato:

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethestimategas
newbie
Activity: 38
Merit: 0
April 21, 2018, 08:49:03 AM
#15
Comunque https://cryptozombies.io/ e' fatto davvero bene e' spiega con cura anche la questione della creazione di interfacce per far comunicare due smart contract.

Grazie Makkara per le tue spiegazioni.

Sto cercando di far comunicare uno smart contract con delle API esterne usando oraclize in questo caso. Ipotizza un contratto che risponde qualcosa solo a determinati indirizzi. Ovviamente la lista degli indirizzi chiamiamoli "whitelisted" li prenderebbe da queste API. Come imposteresti la cosa?

Altra cosa che mi chiedevo, ovviamente in questo caso la chiamata al contratto e la chiamata oraclize dovrebbe pagarla chi effettivamente chiama il contratto giusto? Come fa a capire effettivamente quanti eth servono?

Oppure e' necessario creare un indirizzo dove il contratto attinge? Sta cosa ancora non mi e' del tutto chiara.

Grazie!!
full member
Activity: 1064
Merit: 166
April 19, 2018, 12:30:22 PM
#14
Ci provo ... domanda specifica ...
Come si possono fare interagire due smart contract o come è possibile modificare una procedura di uno smart contract già pubblicato (se possibile).

Puoi usare un pattern del genere

Crei il contratto che esegue le operazioni e contiene i dati
Code:
pragma solidity ^0.4.9;

contract Figlio {
    uint risultato;

    function Figlio(uint valore_iniziale) public {
        risultato = valore_iniziale;
    }
    function setRisultato(uint value) {
        risultato = value;
    }
    function getRisultato() constant returns (uint) {
        return risultato;
    }
}

e poi crei il contratto "Ufficiale" che verrà usato, qui devi definire l'interfaccia del contratto che hai intenzione di usare (Figlio), poi per usarlo crei una nuova istanza e chiami i metodi definiti nell'interfaccia.

Se poi vuoi cambiare la logica ma per motivi di logistica non vuoi cambiare il contratto "Ufficiale" a cui tutti si stanno gia interfacciando, puoi semplicemente cambiare l'indirizzo del figlio.
Code:
pragma solidity ^0.4.9;

contract Figlio {
    function setRisultato(uint value);
    function getRisultato() constant returns(uint);
}

contract Padre {
    address indirizzo_figlio;
    Figlio figlio;
    function Padre(address new_figliolo) public {
        indirizzo_figlio = new_figliolo;
        figlio = Figlio(indirizzo_figlio);
    }
    function setNuovoFiglio(address new_figliolo) {
        indirizzo_figlio = new_figliolo;
        figlio = Figlio(indirizzo_figlio);
    }
    function setRisultato(uint value) {
        return figlio.setRisultato(value);
    }
    function getRisultato()  constant returns(uint) {
        return figlio.getRisultato();
    }
        
}


Comunque esistono diversi pattern che permettono di cambiare il comportamento degli smart contract, se trovo qualche link esaustivo sull'argomento lo posto in seguito.
legendary
Activity: 2506
Merit: 1120
April 19, 2018, 09:01:09 AM
#13
Ci provo ... domanda specifica ...
Come si possono fare interagire due smart contract o come è possibile modificare una procedura di uno smart contract già pubblicato (se possibile).
full member
Activity: 1064
Merit: 166
April 19, 2018, 02:36:03 AM
#12
Bravo Makkara finalmente qualcuno un po' preparato!

Non mi e' ancora chiaro cosa si intende per eventi che generano una notifica...

Volevo chiederti ancora, quando si crea uno smart contract si può' verificare... Ad esempio su myEtherScan se clicchi su Verify and Publish viene verificato. Ma in che senso? Anche questo passaggio non mi e' del tutto chiaro.

Grazie Makkara!

In parole povere quando qualcosa cambia in uno smart contract, che può essere il saldo dei token ma anche altro, se necessario deve essere generato un Evento, questo ha lo scoppo di avvertire gli indirizzi/parti interessate da questo cambiamento e agire di conseguenza. Gli eventi vengono salvati sulla blockchain.

La verifica consiste nel controllare se dato un codice sorgente questo corrisponde allo smart contract pubblicato/compilato ad un certo indirizzo. Compilano il sorgente e confrontano il Bytecode generato.
newbie
Activity: 38
Merit: 0
April 18, 2018, 12:04:25 PM
#11
Bravo Makkara finalmente qualcuno un po' preparato!

Non mi e' ancora chiaro cosa si intende per eventi che generano una notifica...

Volevo chiederti ancora, quando si crea uno smart contract si può' verificare... Ad esempio su myEtherScan se clicchi su Verify and Publish viene verificato. Ma in che senso? Anche questo passaggio non mi e' del tutto chiaro.

Grazie Makkara!
full member
Activity: 1064
Merit: 166
April 18, 2018, 01:20:11 AM
#10
un'altra cosa interessante che ho scoperto/imparato:

Una volta creato un token, ad esempio con il codice standard che trovate qui: https://www.ethereum.org/token mi domandavo come fare in modo che chiunque possa interagire con lo smart contract direttamente ed ottenerli.


Per fare qualcosa di simile ho usato questa funzione, ma in realtà servirebbero altri controlli che non ho inserito, per fare qualcosa di sicuro e non abusabile:

Code:
   // Notifica generazione x tokens all'indirizzo specificato
    event TokenGenerato(address indexed _address, uint _reward);

    function getFreeTokens(){
        uint amount = 100  * 10 ** uint256(decimals);
        
        if (balanceOf[msg.sender] >= amount) throw;
      
        totalSupply += amount;
        balanceOf[msg.sender] += amount;
        
        TokenGenerato(msg.sender, amount);
        
    }

La cosa interessante è che se nell'evento TokenGenerato si inserisce un valore diverso da quello effettivo, ad esempio:

Code:
TokenGenerato(msg.sender, 1000  * 10 ** uint256(decimals));        

Il destinatario può pensare di aver ricevuto 1000 token (la transazione sui trasferimenti dei token mostra 1000 token in ingresso), ma ovviamente andando a controllare il saldo effettivo vedrebbe che ne ha solo 100.

Se non chiamiamo l'evento TokenGenerato, il destinatario ha si 100 token, ma non comprariranno nel saldo token.

Tutto questo giro di parole per far capire che gli eventi sono importanti e indispensabili per avere informazioni aggiornate  Wink
Maggiorni informazioni sugli eventi qui: http://solidity.readthedocs.io/en/v0.4.21/contracts.html#events

Potete verificare quanto sopra controllando i risultati delle transazioni e saldi su https://etherscan.io/


full member
Activity: 1064
Merit: 166
April 17, 2018, 05:37:01 AM
#9
quanti di voi hanno esperienza di programmazione ad oggetti c++etc . inoltre terrei d'occhio eos che pare sia più semplice di eth .


io faccio il programmatore come lavoro, ovviamente aiuta, ma da quello che vedo l'ottica in cui devi entrare quando scrivi uno smart contract è leggermente diversa.

Può essere che nel futuro comparirà qualcos'altro meglio di ethereum a livello di SC, siamo solo all'inizio.  Cool


ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Potresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d.

aggiunti
newbie
Activity: 69
Merit: 0
April 16, 2018, 05:33:07 AM
#8
quanti di voi hanno esperienza di programmazione ad oggetti c++etc . inoltre terrei d'occhio eos che pare sia più semplice di eth .
legendary
Activity: 2506
Merit: 1120
April 16, 2018, 05:29:50 AM
#7
ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Potresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d.
full member
Activity: 1064
Merit: 166
April 16, 2018, 04:22:56 AM
#6
ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io

legendary
Activity: 2506
Merit: 1120
April 13, 2018, 05:12:00 PM
#5
anche io sto studiando come utilizzare gli smart contract
mi piacerebbe interfacciarmi con voi
Io ho trovato questi due articoli che aiutano ad iniziare, non so a che punto siate ma credo che un punto di partenza possa essere interessante:
- https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c
- https://cryptozombies.io/
Happy hack
newbie
Activity: 69
Merit: 0
April 13, 2018, 12:40:38 PM
#4
anche io sto studiando come utilizzare gli smart contract
mi piacerebbe interfacciarmi con voi
full member
Activity: 1064
Merit: 166
March 27, 2018, 04:47:26 AM
#3
L'unica cosa che mi viene in mente è fare uno sha256 della stringa di testo che vuoi salvare, anche se hai un risultato molto diverso dall'archiviarla

si, la soluzione consigliata quando devi archiviare dati ingombranti, vedo che è fare quello più usare un IPFS.
legendary
Activity: 3766
Merit: 1742
Join the world-leading crypto sportsbook NOW!
March 27, 2018, 01:41:36 AM
#2
L'unica cosa che mi viene in mente è fare uno sha256 della stringa di testo che vuoi salvare, anche se hai un risultato molto diverso dall'archiviarla
full member
Activity: 1064
Merit: 166
March 25, 2018, 07:53:02 AM
#1
Buongiorno,

è da un pò che mi sto documentando e provando a fare esperimenti con gli smart contract. Non ho nessun fine particolare solo curiosità per il momento, visto che il tempo che ho a disposizione non è nemmeno poi tanto.  

Mi domandavo se qualcun'altro qui ha già scritto qualche smart contract, oppure vuole condividere qualcosa che ha fatto o rispondere a domande/chiedere aiuto.

Alcuni link utili per cominciare:

Tools:

- http://remix.ethereum.org/
- https://metamask.io/
- http://truffleframework.com/ganache/


Guide:

- https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c
- https://cryptozombies.io/
- http://www.cryptominando.it/2018/04/17/creare-uno-smart-contract-solidity/
- https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c - IPFS

Documentazione:

- http://solidity.readthedocs.io






Condivido qualcosa che non credo sia ovvia (almeno non per me )

Stavo cercando di creare uno smart contract per salvare un numero indeterminato di bytes nel modo piu efficente possibile in quanto i costi possono essere esorbitanti come sappiamo tutti. Dopo vari tentativi non andati a buon fine ho trovato che l'EVM utilizza come dimensione nativa word a 256bit -> 32byte, questo significa che anche se provi a salvare meno di 32byte ti ritrovi sempre a passare minimo 32byte (sticazzi!  Grin)

Ho verificato la cosa con questo smart contract usando http://remix.ethereum.org e Metamask

Code:
pragma solidity ^0.4.19;

contract SimpleStorage {
  bytes input;
  function setInput(bytes enterBytes){
    input = enterBytes;
  }
}

Provando a passare a setInput 1 byte
Code:
["0x00"]
o 32 byte
Code:
["0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa"]

Metamask avvisa che la dimensione non varia: Data included: 100 bytes

Infine passando 33 byte
Code:
["0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa","0xaa"]

Ottengo Data included: 132 bytes Shocked

 

 
Jump to: