Créer son propre token ERC-20 sur le réseau Ethereum.

admin Non classé 283 Comments

Comment créer un token Ethereum (ERC-20)

Créer son propre token ERC-20 sur le réseau Ethereum.

La blockchain Ethereum permet la création d’applications et de tokens ERC-20 par le biais des smart-contracts (contrats intelligents), il existe aujourd’hui sur le Mainnet Ethereum plus de 99.588 tokens dont la grande majorité ne sont pas utilisés. Si il existe un si grand nombre de tokens c’est avant parce que les cryptomonnaies et les tokens fascinent les curieux, les entreprises, les développeurs et le grand public. Il y a donc eue un grand nombre de tests, de tentatives et d’études sur la création de token qui ont été réalisées et seulement une partie infime à aboutie sur de véritables pièces numériques qui circulent et sont échangés sur des plateformes de crypto-monnaies.

Nous allons vous montrer comment créer votre propre token ERC-20 en quelques minutes et le déployer sur la blockchain Ethereum. Que vous soyez simplement curieux ou désireux de lancer une ICO ou même votre propre monnaie numérique la création d’un token ERC-20 est le point de départ. A noter que le déploiement d’un contrat (création d’un token ERC-20) sur Ethereum n’est pas le seul moyen de créer une crypto-monnaie : Vous pouvez aussi utiliser la plateforme NEO, ou bien réaliser un fork d’une crypto-monnaie open-source ou même développer votre propre blockchain.

Avant de commencer veuillez noter que la création d’un token ERC-20 n’est pas forcément très simple, de bonnes connaissances en web et en informatique sont nécessaires et quelques notions de code vous permettront de comprendre ce que vous faites, mais ce n’est pas obligatoire.

Les outils nécessaires pour la création du Token

Un wallet ERC-20

Pour commencer il va vous falloir un portefeuille crypto compatible ERC-20, lors de la création du token, il faudra fournir une adresse qui recevra tout ou partie des tokens générés. Etant donné que ces tokens utiliseront Ethereum et la technologie ERC-20 il vous faut obligatoirement un wallet compatible ERC-20.

Nous vous conseillions d’installer MetaMask qui est un plugin intégré à Chrome. Il intègre toutes les fonctionnalités nécessaire à la création de pièce ERC-20 et vous permettra en plus d’être avertit si vous visiter un site peu fiable qui pourrait pratiquer le phising pour voler vos crypto-monnaies.

Le générateur de contrat / token Ethereum

Le deuxième outils à utiliser est remix.ethereum.org qui vous permet d’éditer vos contrats (token) et de les publier sur le réseau Ethereum. Les contrats ETH ERC 20 se présentent sous la forme de code. C’est ce code source qui va définir le nom de votre token, son symbol ainsi que le nombre de tokens que vous souhaitez mettre en circulation.

Pas d’inquiétude ! Nous vous fournissons plus bas le code source prêt à l’emploi, il vous suffira de modifier quelques lignes pour pouvoir créer vous même votre token sur le réseau Ethereum 🙂

Utiliser le réseau test d’Ethereum pour ne pas payer des GAS

La blockchain Ethereum utilise les GAS pour fonctionner, ainsi si vous souhaitez publier votre token en déployant un contrat, il vous sera demandé un certains nombre de GAS. Le coût de publication d’un nouveau token est de 10€ environ à l’heure actuelle. Aussi pour ne pas avoir à débourser de la monnaie réelle pour nos tests nous allons utiliser un réseau secondaire qui fonctionne exactement comme le réseau Mainnet mais avec la possibilité de recevoir des GAS gratuitement via un faucet.

Cela vous permettra de vérifier gratuiement que la procédure de création de votre token fonctionne bien avant de reproduire cette démarche sur le réseau principal.

Se positionner sur le réseau Ropsten test

Metamask fonctionne de manière synchronisé avec l’outil remix sur le site ethereum.com, par défaut Metamask fonctionne comme un portefeuille classique et est donc relié directement au réseau principal Ethereum (le Mainnet), pour faire vos tests vous allez vous brancher sur le réseau Ropsten.

Vous pouvez également choisir les réseaux Kovan ou Rinkedy qui sont également des réseaux secondaires de test pour Ethereum.

Récupérer des « Ethers » pour pouvoir payer la création de votre token

Rendez vous sur https://faucet.metamask.io pour récupérer des « Ethers » qui ne fonctionneront que sur le réseau Ropsten, ces Ethers et donc ces GAS vous permettront de régler le prix de la création du token sur le réseau Ropsten. Ne sautez pas de joie trop vite, ce sont de faux Ethers qui ne fonctionneront que sur ce réseau et pas sur le Mainnet Ethereum 🙂

Attendez quelques secondes ou minutes en fonction de la charge du réseau et vérifiez que vous avez dorénavant quelques ETH sur votre wallet :

Le code source de votre token Ethereum

Nous allons maintenant passser à l’étape de développement qui n’en est pas réellement une car nous vous fournissons le code source pour la création de votre token, il s’agit d’éditer le code source avec les détails de votre tokens, de se rendre sur le remix.ethereum.org, et de soumettre le contrat nouvellement crée.


pragma solidity ^0.4.4;

contract Token {

    /// @return total amount of tokens
    function totalSupply() constant returns (uint256 supply) {}

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) constant 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) 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) returns (bool success) {}

    /// @notice `msg.sender` approves `_addr` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of wei to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) 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) constant returns (uint256 remaining) {}

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    
}



contract StandardToken is Token {

    function transfer(address _to, uint256 _value) returns (bool success) {
        //Default assumes totalSupply can't be over max (2^256 - 1).
        //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
        //Replace the if with this one instead.
        //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
        if (balances[msg.sender] >= _value && _value > 0) {
            balances[msg.sender] -= _value;
            balances[_to] += _value;
            Transfer(msg.sender, _to, _value);
            return true;
        } else { return false; }
    }

    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        //same as above. Replace this line with the following if you want to protect against wrapping uints.
        //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
        if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
            balances[_to] += _value;
            balances[_from] -= _value;
            allowed[_from][msg.sender] -= _value;
            Transfer(_from, _to, _value);
            return true;
        } else { return false; }
    }

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

    function approve(address _spender, uint256 _value) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
    uint256 public totalSupply;
}


//name this contract whatever you'd like
contract ERC20Token is StandardToken {

    function () {
        //if ether is sent to this address, send it back.
        throw;
    }

    /* Public variables of the token */

    /*
    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. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
    string public symbol;                 //An identifier: eg SBX
    string public version = 'H1.0';       //human 0.1 standard. Just an arbitrary versioning scheme.

//
// CHANGE THESE VALUES FOR YOUR TOKEN
//

//make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token

    function ERC20Token(
        ) {
        balances[msg.sender] = 5000000;               // Give the creator all initial tokens (100000 for example)
        totalSupply = 5000000;                        // Update total supply (100000 for example)
        name = "Nom du token";                                   // Set the name for display purposes
        decimals = 0;                            // Amount of decimals for display purposes
        symbol = "Symbol du token";                               // Set the symbol for display purposes
    }

    /* Approves and then calls the receiving contract */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);

        //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this.
        //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)
        //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead.
        if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; }
        return true;
    }
}

Ce code source provient de : https://github.com/ConsenSys/Token-Factory

Editez les infos de votre tokens

Dans le code source ci-dessus, il y a la fonction ERC20Token qui définie le nom, le symbole ainsi que le nombre de pièces disponible pour ce token. C’est à vous d’éditer ces informations.

    function ERC20Token(
        ) {
        balances[msg.sender] = 5000000;               // Give the creator all initial tokens (100000 for example)
        totalSupply = 5000000;                        // Update total supply (100000 for example)
        name = "Nom du token";                                   // Set the name for display purposes
        decimals = 0;                            // Amount of decimals for display purposes
        symbol = "Symbole du token";                               // Set the symbol for display purposes
    }
  • balances[msg.sender] = Défini le nombre de tokens que le créateur (votre wallet) va recevoir lors de la création.
  • totalSupply = Défini le nombre de tokens crées
  • name = Définira le nom du token
  • decimals = Définira la divisibilité de votre token
  • symbol = Défini le symbol de trading de votre token ERC-20

Ne mettez pas de double quotes (« ) pour les nombres ou les chiffres (balances, totalsupply, decimals) et utilisez des double quotes pour les phrases (name et symbol).

Déploiement du contrat

Une fois que vous avez décidé des différentes infos pour votre token et que vous avez modifié le code source vous allez ensuite déployer le contrat sur le réseau (Ropsten pour notre cas ou Mainnet si vous créez un token réel).

Rendez-vous donc sur l’outil de déploiement des tokens ERC-20 : http://remix.ethereum.org et collez-y votre code source puis compiler votre code. Les warnings ne sont pas importants contrairement aux erreurs, vous aurez probablement une dizaine de warning sur votre code source, ce n’est pas un soucis :

Ensuite allez dans l’onglet run pour véritablement déployer votre token. Vérifiez que vous êtes bien sur le bon environnement de publication (Injected Web 3 : Ropsten pour le test ou Mainnet pour un token réel ERC-20), vérifiez également que l’outil à bien détecté qu’il s’agit d’un token ERC-20.

Une fois ces vérification faites vous pouvez cliquer sur le bouton »Deploy », à ce moment une pop-up de paiement MetaMask va s’ouvrir : il s’agit de régler les frais pour le déploiement de votre token sur la blockchain Ethereum. Vérifiez que vous êtes bien sur le bon serveur et cliquez le bouton Submit pour vous acquitter des frais.

Une fois le paiement effectué vous avez sur MetaMask dans l’onglet sent, la transactions qui s’affiche, vous pouvez cliquer dessus pour suivre cette transaction sur le site Etherescan.

 

Félicitation vous venez de créer votre token ERC-20 sur le réseau Ethereum 🙂

Afficher les tokens dans votre wallet Metamask

La dernière étape consiste à afficher les tokens crées dans votre wallet pour être certain de bien posséder les tokens. Pour cela accédez comme précédemment sur la page Etherscan qui résume le déploiement du contrat (dans l’onglet Sent de Metamask) et récupérer l’identifiant du contrat :

Sur MetaMask, allez dans l’onglet token et cliquez sur le bouton « Add token », collez l’adresse du contrat, normalement si l’adresse est bonne Metamask va remplir automatiquement « Token symbol » et « Decimal », cliquez sur « Add » et le tour est joué.

Vous êtes dorénavant le seul propriétaire de jetons qui ne valent rien à l’heure actuelle mais qui vont vous permettre de faire plein de chose dans le futur, c’est à vous de décider de la suite 🙂

 

Source : Créer son propre token ERC-20 sur le réseau Ethereum.

Comments 283

  1. como ganhar na lotofacil acertar na lotofacil ganhar na lotofacil como ganhar na lotofacil de verdade como ganhar na lotofacil sempre como ganhar na lotofacil 2020 como ganhar na lotofacil 100 garantido dicas lotofacil como acertar na lotofacil dicas para ganhar na lotofacil

  2. Pingback: vagragenericaar.org

  3. Pingback: doctor7online.com

  4. Pingback: generic ventolin

  5. Hey! I’m at work surfing around your blog from my new iphone! Just wanted to say I love reading through your blog and look forward to all your posts! Keep up the outstanding work!|

  6. Pingback: generic viaga sales

  7. Pingback: cheap viagra

  8. Pingback: viagra suppliers

  9. Pingback: sildenafil generic

  10. Wonderful site you have here but I was wondering if you knew of any community forums that cover the same topics talked about in this article? I’d really love to be a part of online community where I can get comments from other experienced people that share the same interest. If you have any recommendations, please let me know. Thanks a lot!|

  11. Hi! I just wanted to ask if you ever have any issues with hackers? My last blog (wordpress) was hacked and I ended up losing a few months of hard work due to no data backup. Do you have any solutions to stop hackers?|

  12. Thanks , I have just been searching for information approximately this subject for a long time and yours is the greatest I’ve discovered so far. But, what concerning the bottom line? Are you sure about the source?|

  13. Greetings, I believe your website could possibly be having browser compatibility issues. Whenever I look at your website in Safari, it looks fine but when opening in IE, it has some overlapping issues. I just wanted to give you a quick heads up! Apart from that, wonderful blog!|

  14. Hello there! This post couldn’t be written much better! Looking through this article reminds me of my previous roommate! He constantly kept talking about this. I most certainly will send this post to him. Pretty sure he’ll have a very good read. Thanks for sharing!|

  15. Heya! I understand this is somewhat off-topic but I had to ask. Does operating a well-established blog like yours take a large amount of work? I am completely new to writing a blog however I do write in my journal every day. I’d like to start a blog so I can easily share my experience and views online. Please let me know if you have any kind of suggestions or tips for new aspiring blog owners. Appreciate it!|

  16. Wonderful post but I was wanting to know if you could write a litte more on this subject? I’d be very thankful if you could elaborate a little bit more. Thanks!|

  17. Hi, Neat post. There’s an issue together with your web site in web explorer, would check this? IE still is the market chief and a large component of other folks will pass over your fantastic writing because of this problem.|

  18. Howdy just wanted to give you a quick heads up. The words in your article seem to be running off the screen in Firefox. I’m not sure if this is a format issue or something to do with web browser compatibility but I thought I’d post to let you know. The design and style look great though! Hope you get the problem solved soon. Thanks|

  19. That is very fascinating, You are an excessively skilled blogger. I’ve joined your rss feed and look forward to in search of extra of your great post. Additionally, I have shared your web site in my social networks|

  20. Pingback: online ed pills

  21. I think this is among the most significant information for me. And i am glad reading your article. But should remark on some general things, The web site style is perfect, the articles is really great : D. Good job, cheers|

  22. Hi my friend! I want to say that this post is awesome, great written and come with almost all vital infos. I would like to peer extra posts like this .|

  23. My coder is trying to persuade me to move to .net from PHP. I have always disliked the idea because of the costs. But he’s tryiong none the less. I’ve been using WordPress on several websites for about a year and am nervous about switching to another platform. I have heard very good things about blogengine.net. Is there a way I can import all my wordpress posts into it? Any kind of help would be really appreciated!|

  24. Hi there, i read your blog occasionally and i own a similar one and i was just curious if you get a lot of spam feedback? If so how do you stop it, any plugin or anything you can suggest? I get so much lately it’s driving me insane so any support is very much appreciated.|

  25. Do you mind if I quote a few of your articles as long as I provide credit and sources back to your site? My blog is in the exact same niche as yours and my visitors would genuinely benefit from some of the information you present here. Please let me know if this ok with you. Appreciate it!|

  26. Hi there! This is my first visit to your blog! We are a collection of volunteers and starting a new initiative in a community in the same niche. Your blog provided us useful information to work on. You have done a extraordinary job!|

  27. Pingback: mens erection pills

  28. With havin so much content do you ever run into any problems of plagorism or copyright violation? My site has a lot of completely unique content I’ve either authored myself or outsourced but it appears a lot of it is popping it up all over the internet without my permission. Do you know any techniques to help reduce content from being ripped off? I’d genuinely appreciate it.|

  29. Great beat ! I would like to apprentice while you amend your site, how could i subscribe for a blog website? The account helped me a acceptable deal. I had been tiny bit acquainted of this your broadcast offered bright clear concept|

  30. I’m really impressed with your writing skills and also with the layout on your blog. Is this a paid theme or did you customize it yourself? Either way keep up the nice quality writing, it is rare to see a nice blog like this one today.|

  31. Howdy I am so happy I found your site, I really found you by error, while I was researching on Bing for something else, Regardless I am here now and would just like to say kudos for a tremendous post and a all round exciting blog (I also love the theme/design), I don’t have time to read it all at the minute but I have book-marked it and also included your RSS feeds, so when I have time I will be back to read a lot more, Please do keep up the awesome work.|

  32. Thanks for every other informative web site. Where else could I get that type of info written in such a perfect approach? I’ve a undertaking that I’m just now running on, and I’ve been on the glance out for such information.|

  33. Pingback: male erection pills

  34. When I originally left a comment I appear to have clicked the -Notify me when new comments are added- checkbox and from now on each time a comment is added I get four emails with the same comment. Perhaps there is a way you are able to remove me from that service? Kudos!|

  35. You can certainly see your expertise in the article you write. The world hopes for more passionate writers like you who are not afraid to say how they believe. At all times go after your heart.|

  36. I’m really inspired along with your writing abilities and also with the structure in your blog. Is that this a paid theme or did you modify it yourself? Anyway keep up the excellent high quality writing, it’s uncommon to look a great blog like this one nowadays..|

  37. I absolutely love your blog.. Very nice colors & theme. Did you develop this website yourself? Please reply back as I’m planning to create my very own site and want to find out where you got this from or just what the theme is called. Kudos!|

  38. Pingback: hydroxychloroquine otc

  39. Pingback: online canadian pharmacy

  40. What i do not understood is in reality how you’re now not actually much more well-preferred than you might be now. You’re very intelligent. You realize therefore considerably in terms of this subject, produced me for my part consider it from so many varied angles. Its like men and women are not interested unless it is one thing to accomplish with Woman gaga! Your personal stuffs great. All the time take care of it up!|

  41. Woah! I’m really digging the template/theme of this site. It’s simple, yet effective. A lot of times it’s very difficult to get that « perfect balance » between superb usability and visual appeal. I must say you’ve done a great job with this. In addition, the blog loads super fast for me on Chrome. Excellent Blog!|

  42. Hello there! I know this is kinda off topic however I’d figured I’d ask. Would you be interested in trading links or maybe guest writing a blog post or vice-versa? My website covers a lot of the same subjects as yours and I think we could greatly benefit from each other. If you happen to be interested feel free to shoot me an e-mail. I look forward to hearing from you! Fantastic blog by the way!|

  43. Hello just wanted to give you a brief heads up and let you know a few of the pictures aren’t loading properly. I’m not sure why but I think its a linking issue. I’ve tried it in two different web browsers and both show the same outcome.|

  44. Thank you a lot for sharing this with all folks you really understand what you’re talking about! Bookmarked. Kindly additionally consult with my site =). We may have a hyperlink trade contract among us|

  45. I feel this is among the most important information for me. And i am satisfied studying your article. However wanna observation on few basic things, The web site style is perfect, the articles is really nice : D. Excellent activity, cheers|

  46. Howdy just wanted to give you a brief heads up and let you know a few of the pictures aren’t loading properly. I’m not sure why but I think its a linking issue. I’ve tried it in two different web browsers and both show the same results.|

  47. Hi there, just became aware of your weblog thru Google, and found that it is really informative. I am gonna be careful for brussels. I’ll appreciate in case you continue this in future. Many folks will probably be benefited from your writing. Cheers!|

  48. An impressive share! I’ve just forwarded this onto a co-worker who was conducting a little research on this. And he in fact ordered me dinner due to the fact that I found it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanx for spending some time to discuss this matter here on your web page.|

  49. After looking at a few of the blog posts on your website, I truly appreciate your way of writing a blog. I bookmarked it to my bookmark site list and will be checking back in the near future. Please check out my web site too and tell me how you feel.|

  50. Its like you read my mind! You seem to understand so much approximately this, like you wrote the e-book in it or something. I feel that you simply can do with some to pressure the message home a bit, but instead of that, that is magnificent blog. A great read. I’ll definitely be back.|

  51. I believe that is among the such a lot vital information for me.
    And i am happy studying your article. However want to commentary on few basic things,
    The website taste is perfect, the articles is actually excellent :
    D. Just right job, cheers

  52. I am now not sure the place you’re getting your information, but great topic.

    I needs to spend some time learning much more or
    figuring out more. Thanks for magnificent info I used to be on the lookout for this info for my mission.

  53. I’m not certain where you are getting your information, but
    great topic. I needs to spend a while learning
    more or understanding more. Thanks for fantastic info I was searching for this info for my mission.

  54. Pingback: online vardenafil

  55. I’m truly enjoying the design and layout of your blog. It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often. Did you hire out a developer to create your theme? Fantastic work!|

  56. Hey just wanted to give you a quick heads up. The text in your content seem to be running off the screen in Ie. I’m not sure if this is a formatting issue or something to do with web browser compatibility but I thought I’d post to let you know. The style and design look great though! Hope you get the problem fixed soon. Cheers|

  57. Heya i’m for the first time here. I found this board and I in finding It truly useful & it helped me out a lot. I’m hoping to provide one thing again and help others such as you aided me.|

  58. Pingback: best acetaminophen pills

  59. I’d like to thank you for the efforts you have put in penning this site. I really hope to view the same high-grade blog posts from you in the future as well. In fact, your creative writing abilities has inspired me to get my very own website now ;)|

  60. I am really impressed with your writing skills and also with the layout on your weblog.
    Is this a paid theme or did you customize it yourself?
    Anyway keep up the nice quality writing, it is rare to see a nice blog
    like this one nowadays.

  61. I’ve been surfing online more than 3 hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. Personally, if all site owners and bloggers made good content as you did, the web will be a lot more useful than ever before.|

  62. Pretty nice post. I just stumbled upon your blog and wished to say that I’ve really enjoyed browsing your blog posts.
    In any case I will be subscribing to your feed and I hope you write
    again soon!

  63. Pingback: generic vardenafil online

  64. Undeniably believe that which you said. Your favorite reason appeared to be on the net the easiest thing to be
    aware of. I say to you, I definitely get annoyed
    while people think about worries that they just don’t know about.
    You managed to hit the nail upon the top as well as defined out the whole thing without having side-effects , people could take a signal.
    Will probably be back to get more. Thanks

  65. I really like your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to do it for you? Plz reply as I’m looking to design my own blog and would like to find out where u got this from. thanks|

  66. Fantastic goods from you, man. I’ve take note your stuff previous to and you are just too great. I really like what you’ve got right here, certainly like what you’re saying and the way in which you assert it. You make it enjoyable and you still take care of to stay it sensible. I cant wait to learn far more from you. That is actually a great website.|

  67. Hi, I think your blog might be having browser compatibility issues.
    When I look at your blog in Safari, it looks fine but when opening in Internet Explorer, it has some overlapping.
    I just wanted to give you a quick heads up! Other
    then that, superb blog!

  68. I got this web page from my pal who informed me concerning this web page and now this time I am browsing this web site and reading very informative posts at this time.|

  69. May I simply just say what a relief to discover somebody who actually understands what they are discussing on the web. You actually understand how to bring an issue to light and make it important. More people should check this out and understand this side of your story. I was surprised that you are not more popular since you certainly have the gift.|

  70. you’re in point of fact a excellent webmaster.

    The site loading pace is incredible. It seems that you’re doing any
    unique trick. In addition, The contents are masterpiece.
    you have done a fantastic job in this subject!

  71. It is appropriate time to make some plans for the future and it’s time to be happy. I’ve read this post and if I could I desire to suggest you some interesting things or advice. Maybe you can write next articles referring to this article. I want to read more things about it!|

  72. Have you ever thought about including a little bit more than just your articles? I mean, what you say is fundamental and everything. But think about if you added some great images or video clips to give your posts more, « pop »! Your content is excellent but with images and videos, this website could certainly be one of the best in its field. Fantastic blog!|

  73. Pingback: online casino real money usa

  74. Pingback: cialis order online

  75. Pingback: online slots

  76. Normally I do not learn post on blogs, but I would like to say that this write-up very forced me to check out and do it! Your writing style has been amazed me. Thanks, very nice post.|

  77. Hi, i think that i saw you visited my website thus i came to “return the favor”.I’m attempting to find things to enhance my web site!I suppose its ok to use some of your ideas!!|

  78. Wow, marvelous blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your site is great, as well as the content!|

  79. Pingback: viagra coupon

  80. Pretty section of content. I just stumbled upon your web site and in accession capital to assert that I get actually enjoyed account your blog posts. Any way I will be subscribing to your augment and even I achievement you access consistently quickly.|

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *