Сначала Спасибо, что нашли время и прочитали это:
Я уже некоторое время работаю над проблемой.Я работаю над созданием своего собственного токена / криптовалюты в сети ethereum, используя это обучающее видео.Несколько вещей, которые вы должны знать:
- Я использую Ganache в качестве локального хоста
- Я использую компьютер Mac
- Я использую терминал для запуска моего HTMLвеб-сайт с кодом
npm run dev
- Я использую атом, чтобы написать весь мой код
Теперь вот код JavaScript, с которым я получаю сообщение об ошибке.В частности, там, где написано App.contracts.CinoCoinSale.deployed().then(function(instance)
, что-либо под этой функцией не работает.Даже когда я console.log
, он появляется в моей консоли.Это действительно странно, и я не знаю, что не так
App = {
web3Provider: null,
contracts: {},
account: '0x0',
loading: false,
tokenPrice: 1000000000000000,
tokensSold: 0,
tokensAvailable: 750000,
init: function() {
console.log("App initialized...")
return App.initWeb3();
},
initWeb3: function() {
if (typeof web3 !== 'undefined') {
// If a web3 instance is already provided by Meta Mask.
App.web3Provider = web3.currentProvider;
web3 = new Web3(web3.currentProvider);
} else {
// Specify default instance if no web3 instance provided
App.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
web3 = new Web3(App.web3Provider);
}
return App.initContracts();
},
initContracts: function() {
$.getJSON("CinoCoinSale.json", function(cinoCoinSale) {
App.contracts.CinoCoinSale = TruffleContract(cinoCoinSale);
App.contracts.CinoCoinSale.setProvider(App.web3Provider);
App.contracts.CinoCoinSale.deployed().then(function(cinoCoinSale) {
console.log("Cino Coin Sale Address:", cinoCoinSale.address);
});
}).done(function() {
$.getJSON("CinoCoin.json", function(cinoCoin) {
App.contracts.CinoCoin = TruffleContract(cinoCoin);
App.contracts.CinoCoin.setProvider(App.web3Provider);
App.contracts.CinoCoin.deployed().then(function(cinoCoin) {
console.log("Cino Coin Address:", cinoCoin.address);
});
return App.render();
});
})
},
render: function() {
if (App.loading) {
return;
}
App.loading = true;
var loader = $('#loader');
var content = $('#content');
loader.show();
content.hide();
// Load account data
web3.eth.getCoinbase(function(err, account) {
if(err === null) {
App.account = account;
$('#accountAddress').html("Your Account: " + account);
}
})
// Load token sale contract
App.contracts.CinoCoinSale.deployed().then(function(instance) {
cinoCoinSaleInstance = instance;
return cinoCoinSaleInstance.tokenPrice();
}).then(function(tokenPrice) {
App.tokenPrice = tokenPrice;
$('.token-price').html(web3.fromWei(App.tokenPrice, "ether").toNumber());
return cinoCoinSaleInstance.tokensSold();
}).then(function(tokensSold) {
App.tokensSold = tokensSold.toNumber();
$('.tokens-sold').html(App.tokensSold);
$('.tokens-available').html(App.tokensAvailable);
var progressPercent = (Math.ceil(App.tokensSold) / App.tokensAvailable) * 100;
$('#progress').css('width', progressPercent + '%');
// Load token contract
App.contracts.CinoCoin.deployed().then(function(instance) {
cinoCoinInstance = instance;
return cinoCoinInstance.balanceOf(App.account);
}).then(function(balance) {
$('.cino-balance').html(balance.toNumber());
})
});
App.loading = false;
loader.hide();
content.show();
}
},
$(function() {
$(window).load(function() {
App.init();
})
});
Тогда вот HTML-код, который я использую для запуска своего веб-сайта на локальном сервере.Веб-сайт выглядит действительно хорошо и работает, за исключением одной вещи: часть, которая не появляется, и у меня возникла проблема, это вставка значений из предыдущего кода.Это может сбивать с толку, так что вот пример: для фрагмента кода <p><span class="tokens-sold"></span> / <span class="tokens-available"></span> tokens sold</p>
должны быть вставлены значения для части class="tokens-sold"
, а class="tokens-available"
эти значения должны быть вставлены из файла Javascript, я думаю, но он не работает ипоэтому не появляется на сайте.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cino Coin ICO Sale</title>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container" style="width: 650px;">
<div class="row">
<div class="col-lg-12">
<h1 class="text-center">CINO COIN ICO SALE</h1>
<hr/>
<br/>
</div>
<div id="loader">
<p class="text-center">Loading...</p>
</div>
<div id="content" class="text-center" style="display: none;">
<p>
Introducing "Cino Coin" (CC)!
Token price is <span class="token-price"></span> Ether. You currently have <span class="dapp-balance"></span> CC's.
</p>
<br/>
<form onSubmit="App.buyTokens(); return false;" role="form">
<div class="form-group">
<div class="input-group">
<input id="numberOfTokens" class="form-control input-lg" type="number" name="number" value="1" min="1" pattern="[0-9]">
</input>
<span class="input-group-btn">
<button type="submit" class="btn btn-primary btn-lg">Buy Tokens</button>
</span>
</div>
</div>
</form>
<br>
<div class="progress">
<div id="progress" class="progress-bar progress-bar-striped active" aria-valuemin="0" aria-valuemax="100">
</div>
</div>
<p><span class="tokens-sold"></span> / <span class="tokens-available"></span> tokens sold</p>
<hr>
<p id="accountAddress"></p>
</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> .</script>
<script src="js/bootstrap.min.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
Я был бы очень признателен, если бы решение было найдено.Если вам нужно больше подробностей о том, в чем проблема, или вы не понимаете проблему, просто скажите, и я попытаюсь объяснить это по-другому.
Кроме того, здесь - этовидео, которое я использую.Я застрял во время 11:48, где указана цена токена.Я закончил остальную часть серии видео, и мой код работал до сих пор.
Еще раз большое спасибо, я действительно ценю это:)
Вот папка проекта
Это снимок папки
Редактировать
Я провел еще несколько исследований и обнаружил, что что-нибудьпод App.contracts.CinoCoinSale.deployed().then(function(instance) {
не работает.Даже когда я поставлю console.log("hi");
, он не будет распечатываться на консоли.Я до сих пор не знаю, как решить эту проблему, но, возможно, это поможет.Это как игнорирование этой функции по какой-то причине