Примечание. Как правило, всем нравится называть Token какТокен,но это очень неточно.Если его надо называть китайским,то я больше согласен.Токенэто понимание. Однако, чтобы сохранить оригинальный колорит, нет необходимости его переводить, поэтому эта статья единообразно сохранена на английском языке.
Как правило, порог для производства токена не очень высок, поэтому у каждого есть возможность создавать свои собственные токены.
Однако не ожидайте сделать токен с дополнительной логикой, такими как стоимость подходящих, поэтому, если вы хотите сделать это, вам нужны некоторые расходы.
Давайте сразу перейдем к теме ниже.Нам не нужно знать, как писать смарт-контракты, потому что протокол ERC20, предоставляемый Ethereum, достаточно глуп.Чтобы сделать простой токен, у чиновника есть стандартный код смарт-контракта в качестве примера, тогда нам нужно только знать Производственный процесс.
Многословно, на самом деле, то же самое верно и для изучения других технических знаний, мы не должны торопиться гнаться за очень внутренними вещами, нам нужноПоложительный отзывИспользуя метод обучения, сначала сделайте несколько простых демонстраций и постепенно углубляйтесь в изучение, укрепляя уверенность в себе и стимулируя энтузиазм.
Установить МетаМаск
Сначала нужно установить плагин браузераMetaMask, автор плагина очень приятный, этот практичный плагин можно установить на три основных браузера (Google, FireFox, Opera). Процесс установки этого плагина повторяться не будет.Теперь предположим, что мы его установили, нажимаем на плагин, и проходим через дваAcceptПосле согласия с условиями работы перейдите на страницу создания учетной записи.
Обратите внимание на три стрелки на картинке- Первая стрелка указывает на то, что мы сейчас находимся вRopsten Test NetПротестируйте сеть, и основное различие между основной сетью основной сети Императора и обычной, только каждый может распознать значение значения только в основной сети, а тестовая сеть в основном используется для разработки тестирования.
- Вторая стрелка означает создание нового контракта учетной записи в качестве законного пользователя в сети Ethereum.
- Третья стрелка означает импорт контракта учетной записи, если у вас есть контракт учетной записи в сети.
Создать новую контрактную учетную запись
После ввода пароля длиной более восьми символов на странице создания учетной записи введитемнемоническийстраницы, эти мнемоники — единственные ключи, которые могут помочь вам сохранить контракт с вашей учетной записью и сохранить его в безопасности.
купить эфир
Не паникуйте, не позволяйте вам сильно тратить деньги, просто нужно получить еще несколько кнопок на веб-сайте, предоставленном Metamask (ведь эти тестовые сети не имеют реальной ценности).
После сохранения MNEMONIC мы войдем на страницу основной учетной записи,
Затем нажмите кнопку со стрелкой 1 на изображении выше, чтобы перейти на страницу покупки, URL-адресTest Ether Faucet Нажмите кнопку со стрелкой 1, чтобы получить один эфир (нажмите, чтобы получить по одному), у меня получилось 6 эфиров, а стрелка 2 — это запись транзакции перевода.Хорошо, отложим это на времяMetaMask, Давайте игратьRemix!
Знакомьтесь с IDE для ремиксов
Remix — это браузерная IDE Solidity, и в ней довольно удобно разрабатывать и отлаживать базовый код смарт-контрактов.Remix - Solidity IDE
- Первая стрелка - это каталог проекта, вы можете создать каталог файлов здесь.
- Вторая стрелка — кодовая полоса, где написан код нашего контракта.
- Третья стрелка — это панель журнала, и здесь отображаются выходные данные журнала отладки развертывания.
- Четвертая стрелка — панель отладки, где осуществляется развертывание и отладка контракта.
Нужно ознакомиться с этим инструментом? Конечно, и чем привычнее, тем лучше, но не сейчас, не забывайте, что наша цель сейчас — сделать свой токен.
Контракт токена
На официальном веб-сайте Ethereum есть стандартный контракт с токеном для справки учащимся, а также есть очень подробные учебные пособия, которые научат вас развертывать собственный токен.Create a cryptocurrency contract in Ethereum
Отличие этой статьи от официальной в том, что мы используемЛегкий кошелек MetaMask и онлайн-среда разработки RemixДля разработки, отладки и развертывания официальный Ethereum-кошелек довольно утомителен для новичков, так как синхронизация полных данных узла основной сети или тестовой сети очень медленная и занимает много места на диске. Попробуйте выбрать спокойный способ для первого опыта, не оставляйте себе плохое настроение :)
Мы копируем официальный код контракта Token в столбец кода Remix и вставляем код контракта сюда:
pragma solidity ^0.4.16;
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }
contract TokenERC20 {
// Public variables of the token
string public name;
string public symbol;
uint8 public decimals = 18;
// 18 decimals is the strongly suggested default, avoid changing it
uint256 public totalSupply;
// This creates an array with all balances
mapping (address => uint256) public balanceOf;
mapping (address => mapping (address => uint256)) public allowance;
// This generates a public event on the blockchain that will notify clients
event Transfer(address indexed from, address indexed to, uint256 value);
// This notifies clients about the amount burnt
event Burn(address indexed from, uint256 value);
/**
* Constructor function
*
* Initializes contract with initial supply tokens to the creator of the contract
*/
function TokenERC20(
uint256 initialSupply,
string tokenName,
string tokenSymbol
) public {
totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount
balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens
name = tokenName; // Set the name for display purposes
symbol = tokenSymbol; // Set the symbol for display purposes
}
/**
* Internal transfer, only can be called by this contract
*/
function _transfer(address _from, address _to, uint _value) internal {
// Prevent transfer to 0x0 address. Use burn() instead
require(_to != 0x0);
// Check if the sender has enough
require(balanceOf[_from] >= _value);
// Check for overflows
require(balanceOf[_to] + _value > balanceOf[_to]);
// Save this for an assertion in the future
uint previousBalances = balanceOf[_from] + balanceOf[_to];
// Subtract from the sender
balanceOf[_from] -= _value;
// Add the same to the recipient
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
// Asserts are used to use static analysis to find bugs in your code. They should never fail
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}
/**
* Transfer tokens
*
* Send `_value` tokens to `_to` from your account
*
* @param _to The address of the recipient
* @param _value the amount to send
*/
function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
}
/**
* Transfer tokens from other address
*
* Send `_value` tokens to `_to` on behalf of `_from`
*
* @param _from The address of the sender
* @param _to The address of the recipient
* @param _value the amount to send
*/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]); // Check allowance
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
/**
* Set allowance for other address
*
* Allows `_spender` to spend no more than `_value` tokens on your behalf
*
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
*/
function approve(address _spender, uint256 _value) public
returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
}
/**
* Set allowance for other address and notify
*
* Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it
*
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
* @param _extraData some extra information to send to the approved contract
*/
function approveAndCall(address _spender, uint256 _value, bytes _extraData)
public
returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
spender.receiveApproval(msg.sender, _value, this, _extraData);
return true;
}
}
/**
* Destroy tokens
*
* Remove `_value` tokens from the system irreversibly
*
* @param _value the amount of money to burn
*/
function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value); // Check if the sender has enough
balanceOf[msg.sender] -= _value; // Subtract from the sender
totalSupply -= _value; // Updates totalSupply
Burn(msg.sender, _value);
return true;
}
/**
* Destroy tokens from other account
*
* Remove `_value` tokens from the system irreversibly on behalf of `_from`.
*
* @param _from the address of the sender
* @param _value the amount of money to burn
*/
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value); // Check if the targeted balance is enough
require(_value <= allowance[_from][msg.sender]); // Check allowance
balanceOf[_from] -= _value; // Subtract from the targeted balance
allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance
totalSupply -= _value; // Update totalSupply
Burn(_from, _value);
return true;
}
}
развернуть контракт
Далее мы сначала выбираем версию нашего компилятора, соответствующую номеру версии первой строки кода контрактаpragma solidity ^0.4.16
Щелкните вкладку со стрелкой 1, чтобы войти в интерфейс настроек, а затем щелкните стрелку 2, чтобы выбрать соответствующую версию компилятора, здесь 0.4.16.
Затем нажмите вкладку компиляции (Compile), вы увидите, что компиляция прошла успешно
Затем щелкните вкладку «Выполнить» (Run), чтобы развернуть
- Первая стрелка выбирает среду развертывания, которая автоматически обнаружит сеть (Ropsten Test Net), в которой в данный момент находится наша MetaMask.
- Вторая стрелка вводит некоторую основную информацию о нашем токене.
- Первый параметр представляет собой общий тираж токенов, здесь я просто ввожу 10 миллионов.
- Второй параметр указывает имя токена
- Третий параметр представляет символ токена, символ обычно идентифицируется как токен в обращении
- Нажмите на третью стрелку, чтобы создать порядок транзакции развертывания и начать окончательное развертывание.
Единственные вещи, которые здесь можно изменить, это Лимит газа и Цена на газ, Вообще говоря, эти два данных будут автоматически генерироваться в соответствии со сложностью текущего контракта и средним рынком. Поэтому менять эти два значения вообще не обязательно.Если стесняетесь, можете поменять на меньшее значение, но может случиться так, что газ израсходован (раз газ израсходован, а контракт еще не развернут в сеть, то все операции откатываются, кроме комиссии майнера, которую вы платите).
Нажмите кнопку публикации (ОТПРАВИТЬ) и дождитесь успешного выпуска!
Откроется страница метамаски
На рисунке выше показан статус выпуска, а на рисунке ниже показан статус выпуска. В это время мы обнаружим, что наш баланс счета немного снизился, потому что он используется для оплаты шахтеров для публикации договора.
До сих пор неясно, был ли он успешно выпущен.Нажмите на лист транзакции, чтобы перейти на страницу сведений о транзакции.Когда вы видите «Успех» под стрелкой 1, это означает, что наш Токен был успешно выпущен!
Нажмите на ссылку на адресной стрелке 2, введите страницу сведений с договором договора
Щелкните ссылку Адрес токена под стрелкой, чтобы перейти на страницу сведений о токене.
Итак, наш токен готов!
Токен отображается в кошельке
Давайте возьмем MetaMask в качестве примера для демонстрации.Другие кошельки, такие как ImToken, также могут увидеть то же самое, скопировав адрес токена.
Сначала переключитесь на вкладку Token
Нажмите Add Token, просто введите адрес контракта Token
Нажмите кнопку «Добавить», чтобы увидеть наш собственный токен на метамаске.
резюме
Во всем процессе создания Токена нет никаких сложностей, но большинство людей не знают этого процесса, и они могут приступить к работе сразу же после того, как попрактиковались. Позже мы поиграем с некоторыми более сложными смарт-контрактами, но, опять же, потребуются некоторые базовые знания языка программирования Solidity и знания, связанные с блокчейном. Solidity, стандартный язык программирования Ethereum, также будет подробно объяснен, так что ждите его~
Добро пожаловать на официальный аккаунт: «Биткойн» и исследуйте мир блокчейна вместе со мной.