Crypto-Scraper/tests/neo_org.html
2025-05-06 00:16:22 -04:00

1918 lines
88 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!--
___ __ __ __ ___ __ ___ __
| \ | | | __ ___| | ___ |
| \ | | | |__ ___ | | | |
| |\ \| | | __ ___| | | | |
| | \ | | |__ ___ | |___| |
|__| \ ___| |__ __ ___| |__ ___ __|
https://neo.org/
Want to make this site better?
https://github.com/neo-project/neo.org
-->
<html lang="en">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="format-detection" content="telephone=no" />
<meta name="robots" content="index,follow">
<meta name="description" content='Neo is an open-source, community driven platform that is leveraging the intrinsic advantages of blockchain technology to realize the optimized digital world of the future.'>
<meta name="author" content="neo-project">
<meta name="application-name" content="neo.org">
<meta name="renderer" content="ie-stand">
<meta name="keywords" content=",Neo,Blockchain,智能经济,区块链">
<title>Neo Smart Economy</title>
<meta property="og:url" content="https://neo.org/" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Neo Smart Economy" />
<meta property="og:description" content="Neo Smart Economy" />
<meta property="og:image" content="https://neo-web.azureedge.net/images/twitter-img.jpg" />
<meta name="twitter:title" content="Neo Smart Economy" />
<meta name="twitter:description" content="Neo Smart Economy" />
<meta name="twitter:image" content="https://neo-web.azureedge.net/images/twitter-img.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#00aba9">
<meta name="theme-color" content="#ffffff">
<link href="https://neo-web.azureedge.net/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://neo-web.azureedge.net/css/site.min.css?v=360D0BE60FF9991CCAC58AEFD33616A89B19D5074B2F88B173B442C17DC9E013" rel="stylesheet" />
<style>
@font-face {
font-family: 'WorkSans';
src: url('/font/WorkSans-Light.ttf');
font-weight: 300;
}
@font-face {
font-family: 'WorkSans'; /* project id 1408484 */
src: url('/font/WorkSans-Bold.ttf');
font-weight: 700;
}
@font-face {
font-family: 'WorkSans';
src: url('/font/WorkSans-SemiBold.ttf');
font-weight: 600;
}
@font-face {
font-family: 'NunitoSans';
src: url('/font/NunitoSans-ExtraBold.ttf');
font-weight: 800;
}
@font-face {
font-family: 'NunitoSans';
src: url('/font/NunitoSans-Bold.ttf');
font-weight: 700;
}
@font-face {
font-family: 'NunitoSans';
src: url('/font/NunitoSans-SemiBold.ttf');
font-weight: 600;
}
@font-face {
font-family: 'NunitoSans';
src: url('/font/NunitoSans-Regular.ttf');
font-weight: 400;
}
</style>
<link rel="stylesheet" href="https://neo-web.azureedge.net/css/home.min.css?v=49F5587338EEBE504A6CF9E20F0D4DB714E07595E477D68AD9612F917ABB483C" />
</head>
<body id="neo-body">
<nav class="navbar smart-scroll container-fluid navbar-expand-lg">
<div class="container">
<a class="mt-1" href="/">
<img id="whitelogo" src="https://neo-web.azureedge.net/images/logo files-white.svg" alt="Neo Logo" />
<img id="darklogo" src="https://neo-web.azureedge.net/images/logo files-dark.svg" alt="Neo Logo" />
</a>
<button class="navbar-toggler" type="button">
<div class="special-button">
<div class="top"></div>
<div class="bottom"></div>
</div>
</button>
<div class="collapse navbar-collapse">
<ul class="navbar-nav ml-auto">
<li class="nav-item" style="position: relative;">
<a class="nav-link dropdown-toggle" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Discover Neo
</a>
<div class="dropdown-menu p-2" aria-labelledby="dropdownMenuButton">
<i class="iconfont">&#xeb21;</i>
<div class="row text-center text-md-left">
<div class="col-md-6">
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/about">
<img src="https://neo-web.azureedge.net/images/nav-1.png" />
<div>
<strong>Neo Defined</strong>
<span>Learn about the Neo project</span>
</div>
</a>
</div>
<div class="col-md-6">
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/technology">
<img src="https://neo-web.azureedge.net/images/nav-3.png" />
<div>
<strong>Neo Technology</strong>
<span>Explore the features</span>
</div>
</a>
</div>
<div class="col-md-6">
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/neogas">
<img src="https://neo-web.azureedge.net/images/nav-2.png" />
<div>
<strong>NEO & GAS</strong>
<span>Neos unique dual token model</span>
</div>
</a>
</div>
<div class="col-md-6">
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/contributors">
<img src="https://neo-web.azureedge.net/images/nav-4.png" />
<div>
<strong>Contributors</strong>
<span>A global effort</span>
</div>
</a>
</div>
</div>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="/gov">Governance</a></li>
<li class="nav-item"><a class="nav-link" href="/dev">Developer</a></li>
<li class="nav-item"><a class="nav-link" href="/eco">Eco-Support</a></li>
<li class="nav-item"><a class="nav-link" href="/news">News</a></li>
<li class="nav-item"><a class="nav-link" href="https://ndapp.org/" target="_blank">dApps</a></li>
<li class="nav-item d-block d-md-none"><a class="nav-link" href="/migration">Migration</a></li>
<li class="nav-item nav-lang">
<a style="font-size: 1em; font-weight: 600" class="nav-link" href="javascript:" onclick="setLanguage('en-us')">EN</a> |
<a style="font-size: .9em; font-weight: 500" class="nav-link" href="javascript:" onclick="setLanguage('zh-cn')">中文</a>
</li> </ul>
</div>
</div>
</nav>
<div class="container layout-container">
<div class="migration-div d-none d-md-block">
<a href="/migration">
<p class="migration-text tw-flex tw-gap-1 tw-text-lg tw-font-semibold">
<img src="https://neo-web.azureedge.net/images/presskit/Neo symbol.svg" />
MIGRATE TO N3
</p>
</a>
</div>
<div class="home-container">
<style>
.navbar.smart-scroll {
border-bottom: 1px solid rgba(0,0,0,0.05);
background-color: rgba(255,255,255,.95);
opacity: 0.95px;
}
.migration-div.d-md-block {
display: none !important;
}
.neox {
position: relative;
min-height: 740px;
background-image: url('/images/home/neox/bg.png');
background-repeat: no-repeat;
background-size: cover;
}
.neox .lt {
position: absolute;
height: 100%;
width: 100%;
background-repeat: no-repeat;
background-position-x: left;
background-position-y: top;
background-size: 20%;
background-image: url('/images/home/neox/lt.png')
}
.neox .lb {
position: absolute;
height: 100%;
width: 100%;
background-repeat: no-repeat;
background-position-x: left;
background-position-y: bottom;
background-size: 20%;
background-image: url('/images/home/neox/lb.png');
}
.neox .x {
position: absolute;
height: 100%;
width: 100%;
background-image: url('/images/home/neox/x.png');
background-repeat: no-repeat;
background-position-x: right;
background-position-y: top;
background-size: 55%;
}
.neox .container {
padding-top: 150px;
padding-bottom: 80px;
}
.neox h1 {
font-size: 4.8rem;
line-height: 1.1;
}
.neox .ls3 {
letter-spacing: 3px
}
@media only screen and (max-width: 992px) {
.neox h1 {
font-size: 3rem
}
.neox .lt {
background-size: 28%;
}
.neox .lb {
background-size: 28%;
}
.neox .x {
background-size: 70%;
}
.neox {
min-height: 640px;
}
}
@media only screen and (max-width: 768px) {
.neox .lt {
background-size: 50%;
}
.neox .lb {
background-size: 40%;
}
.neox .x {
background-size: 80%;
}
.neox {
min-height: 540px;
}
}
</style>
<div class="neox">
<div class="lt"></div>
<div class="lb"></div>
<div class="x"></div>
<div class="container">
<div class="row">
<div class="col-lg-6 pt-5">
<div class="work-sans-bold">
<h1 class="uppercase">
Introducing:<br />
Neo X
</h1>
</div>
<div class="work-sans-semibold my-4 uppercase ls3">
Neos EVM-based sidechain is here.<br />
Find out what opportunities await.
</div>
<div class="my-4">
<a href="https://x.neo.org/" target="_blank" class="btn-2">LEARN MORE</a>
</div>
<div class="work-sans-bold my-4">Latest News:</div>
<div class="my-4">
<a class="news-link" href="/blog/details/4317">Neo X Grind Hackathon kicks off for EVM innovators with over $22 million in prizes and grants <i class="iconfont circle-arrow-icon">&#xe6ab;</i></a>
</div>
</div>
</div>
</div>
</div>
<div class="row horiz-row aio-row">
<div class="col-12 col-md-12">
<div class="aio-title d-none-zh">
<span class="green">All</span> in One - <span class="green">All</span> in Neo
</div>
<div class="aio-title d-none">
<span class="green">All</span> in One - <span class="green">All</span> in Neo
</div>
<div class="highlight-container">
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Interoperability.svg" />
<div class="highlight-name">Interoperability</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NativeOracles.svg" />
<div class="highlight-name">Native Oracles</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Self-SovereignID.png" />
<div class="highlight-name">Self-Sovereign ID</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/DecentralizedStorage.svg" />
<div class="highlight-name">Decentralized Storage</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NativeNameService.svg" />
<div class="highlight-name">Neo Name Service</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/OneBlockFinality.svg" />
<div class="highlight-name">One Block Finality</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/BestInClassTooling.svg" />
<div class="highlight-name">Best-In-Class Tooling</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/SmartContracts.svg" />
<div class="highlight-name">Smart Contracts</div>
</div>
<div class="highlight-wrapper">
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Multi-Language.png" />
<div class="highlight-name">Multi-Language</div>
</div>
</div>
<div class="additional-button-wrapper">
<a class="btn-2" target="_blank" href="/tour">Take A Tour</a>
</div>
</div>
</div>
<div class="row dual-row get-started-row">
<div class="col-12 col-md-6 col-left">
<div class="get-started-title">
<span class="green">Neo</span> is
<br />
new again
</div>
<div class="explanation">
After four years of stable MainNet operation, Neo is undergoing its biggest evolution as it migrates to N3 - The most powerful and feature rich version of the Neo blockchain to date.
</div>
<a class="btn-2" href="/migration">Learn More</a>
<div class="additional-button-wrapper">
<a class="btn-2" target="_blank" href="/tour">Take A Tour</a>
</div>
</div>
<div class="col-12 col-md-6 col-right">
<div class="get-started-wrapper">
<a class="float-card" href="/neogas#wallets">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Find a Wallet
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/FindWallet.svg" />
</a>
<a class="float-card" href="/neogas#tokens">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Neo & Gas Tokens
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/LearnTokens.svg" />
</a>
<a class="float-card" href="/technology">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Neo's Features
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/LearnFeatures.svg" />
</a>
<a class="float-card" href="https://developers.neo.org/docs">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Documentation
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
</a>
</div>
</div>
</div>
<div class="building-blocks-container">
<div class="building-blocks-row">
<div class="col-left">
<div class="caption-square-container building-blocks">
<div class="caption-square-inner-wrapper">
<div class="title"><em>Building Blocks</em> for the Next Generation Internet</div>
</div>
</div>
</div>
<div class="col-right">
<span>
<span class="building-blocks-subtitle">
Neo provides a full stack of features out of the box, but doesn't keep you boxed in.
</span>
<br /><br />
<span class="building-blocks-body">
Native functionality provides all the infrastructure you need to build complete decentralized applications, while advanced interoperability allows you to harness the power of the global blockchain ecosystem.
</span>
</span>
<a class="btn-2 building-blocks-btn" href="/technology#all-in-one">Learn More</a>
</div>
</div>
<div class="neo-features-container">
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/OneBlockFinality3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
One Block Finality
</div>
<div class="block-paragraph">
dBFT consensus mechanism guarantees fast and efficient finality in a single block.
</div>
</div>
</div>
</div>
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NativeOracles3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
Oracle
</div>
<div class="block-paragraph">
A built-in oracle enabling secured access to any off-chain data.
</div>
</div>
</div>
</div>
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoFS3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
NeoFS
</div>
<div class="block-paragraph">
A distributed data storage solution made for scalability and privacy.
</div>
</div>
</div>
</div>
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/SmartContracts3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
Smart Contracts
</div>
<div class="block-paragraph">
Write your smart contracts in C#, Go, Python, Java, or TypeScript.
</div>
</div>
</div>
</div>
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoNameService3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
Neo Name Service
</div>
<div class="block-paragraph">
A decentralized .neo domain name service for next-gen internet web applications.
</div>
</div>
</div>
</div>
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Interoperability3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
Interoperability
</div>
<div class="block-paragraph">
Poly.Network enabled cross-chain interoperability with Ethereum, Binance Chain, and more.
</div>
</div>
</div>
</div>
<div class="neo-feature-item">
<div class="block-wrapper">
<div class="block-icon-wrapper">
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoID3D.svg" />
</div>
<div class="block-content-wrapper">
<div class="block-title">
<i class="iconfont circle-arrow-icon">&#xe6ab;</i>
NeoID
</div>
<div class="block-paragraph">
A set of self-sovereign decentralized identity solution standards.
</div>
</div>
</div>
</div>
</div>
<div class="blockchain-caption-square-row">
<div class="caption-square-container blockchain">
<div class="caption-square-inner-wrapper">
<div class="title"><em>Blockchain</em><br />You know</div>
<div class="subtitle">
Write smart contracts in a language you already love
</div>
</div>
</div>
<a class="btn-2 code-learn-more" href="/technology#smart-contracts">Learn More</a>
</div>
</div>
<div class="code-example-row">
<div class="language-list">
<div class="language-wrapper">
<div class="language-name">
Python
</div>
<div class="language-icon python" data-lang="python">
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/PythonDark.png?v=FA87DB6277DE398911235F4E6CA8BB2B70A049A0736A99DCA2446FE8E25C4FE1" />
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Python.png?v=F27CA4EF53EEEB69D69F8A327F7E4B97835F3C4F9A224874163B8856F176B32E" />
</div>
</div>
<div class="language-wrapper">
<div class="language-name">
C#
</div>
<div class="language-icon csharp" data-lang="csharp">
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/CSharpDark.png?v=1E83E06BE355719937418DF9F4566E8B692B75BDA1183FB0E1217B8D72D25038" />
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/CSharp.png?v=C9496386014700D21E30EE1BD6C1C47F5A46EFB47F5DF8955FEAA3263D9758C2" />
</div>
</div>
<div class="language-wrapper">
<div class="language-name">
Go
</div>
<div class="language-icon go" data-lang="go">
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GoDark.png?v=DE7AA8958667FB5445A874E59BDADBDB5A2EB3D6EDE70E5CFC699BFBD6471BCB" />
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Go.png?v=18D18CBCA8DC5822AB6CDE1D19997C340A4D699BEDEA35824DB5EADA8D4C7023" />
</div>
</div>
<div class="language-wrapper">
<div class="language-name">
Typescript
</div>
<div class="language-icon typescript" data-lang="typescript">
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/TypescriptDark.png?v=1993D830082C3EAD058D0E1E828CDEB707E3319DCAFCD58EF674BA6C36B0A837" />
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Typescript.png?v=D0FF6E2AEBE52B1C8BA48CDC13C581748D467D7DB5005BFDF9963F85F9586AEB" />
</div>
</div>
<div class="language-wrapper ">
<div class="language-name">
Java
</div>
<div class="language-icon java" data-lang="java">
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/JavaDark.png?v=0415D77042D0D4DB9DF5757D2AC220E98599DF22B02677B50969A8BEA3C7981D" />
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Java.png?v=BD7F4EFF8ED65C73DE196484498308A84EF8D0BE8010AB8142874E69D57F16DA" />
</div>
</div>
</div>
<div class="code-window d-none" id="code-python">
<div class="top-bar">
<div class="top-bar-dots">
</div>
<div class="top-bar-title">
Python
</div>
</div>
<div class="top-bar-mobile">
<div class="top-bar-title-wrapper">
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/PythonDark.png" />
<div class="top-bar-title">
Python
</div>
</div>
<i class="iconfont close-icon">&#xe603;</i>
</div>
<pre class="green code">
<code>
from boa3.builtin.contract import Nep17TransferEvent, abort
&#64;metadata
def manifest_metadata() -> NeoMetadata:
meta = NeoMetadata()
meta.author = "coz"
return meta
OWNER = UInt160(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
TOKEN_TOTAL_SUPPLY = 100_000_000 * 100_000_000 # 10m total supply * 10^8 (decimals)
# Events
on_transfer = Nep17TransferEvent
&#64;public
def transfer(from_address: UInt160, to_address: UInt160, amount: int, data: Any) -> bool:
assert len(from_address) == 20 and len(to_address) == 20
assert amount >= 0
# The function MUST return false if the from account balance does not have enough tokens to spend.
from_balance = get(from_address).to_int()
if from_balance < amount:
return False
# The function should check whether the from address equals the caller contract hash.
if from_address != calling_script_hash:
if not check_witness(from_address):
return False
# skip balance changes if transferring to yourself or transferring 0 cryptocurrency
if from_address != to_address and amount != 0:
if from_balance == amount:
delete(from_address)
else:
put(from_address, from_balance - amount)
to_balance = get(to_address).to_int()
put(to_address, to_balance + amount)
on_transfer(from_address, to_address, amount)
# if the to_address is a smart contract, it must call the contract's onPayment method
post_transfer(from_address, to_address, amount, data)
return True
</code>
</pre>
<div class="bottom-bar">
<div class="bottom-bar-title">Python Resources</div>
<div class="bottom-bar-buttons">
<a class="bottom-bar-button" href="https://docs.coz.io/neo3/boa/index.html" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
Documentation
</a>
<a class="bottom-bar-button" href="https://github.com/CityOfZion/neo3-boa/tree/development/boa3_test/examples" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
Templates
</a>
<a class="bottom-bar-button" href="dev#tooling">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
Tools
</a>
</div>
</div>
</div>
<div class="code-window d-none" id="code-csharp">
<div class="top-bar">
<div class="top-bar-dots">
</div>
<div class="top-bar-title">
C#
</div>
</div>
<div class="top-bar-mobile">
<div class="top-bar-title-wrapper">
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/CSharpDark.png" />
<div class="top-bar-title">
C#
</div>
</div>
<i class="iconfont close-icon">&#xe603;</i>
</div>
<pre class="green code">
<code>
using Neo;
using Neo.SmartContract;
using Neo.SmartContract.Framework;
using Neo.SmartContract.Framework.Attributes;
using Neo.SmartContract.Framework.Native;
using Neo.SmartContract.Framework.Services;
using System;
using System.Numerics;
namespace Desktop
{
[ManifestExtra("Author", "Neo")]
[ManifestExtra("Email", "dev@neo.org")]
[ManifestExtra("Description", "This is a contract example")]
[ContractSourceCode("https://github.com/neo-project/neo-devpack-dotnet/tree/master/src/Neo.SmartContract.Template")]
public class Contract1 : SmartContract
{
//TODO: Replace it with your own address.
[InitialValue("NiNmXL8FjEUEs1nfX9uHFBNaenxDHJtmuB", ContractParameterType.Hash160)]
static readonly UInt160 Owner = default;
private static bool IsOwner() => Runtime.CheckWitness(Owner);
// When this contract address is included in the transaction signature,
// this method will be triggered as a VerificationTrigger to verify that the signature is correct.
// For example, this method needs to be called when withdrawing token from the contract.
public static bool Verify() => IsOwner();
// TODO: Replace it with your methods.
public static string MyMethod()
{
return Storage.Get(Storage.CurrentContext, "Hello");
}
public static void _deploy(object data, bool update)
{
if (update) return;
// It will be executed during deploy
Storage.Put(Storage.CurrentContext, "Hello", "World");
}
public static void Update(ByteString nefFile, string manifest)
{
if (!IsOwner()) throw new Exception("No authorization.");
ContractManagement.Update(nefFile, manifest, null);
}
public static void Destroy()
{
if (!IsOwner()) throw new Exception("No authorization.");
ContractManagement.Destroy();
}
}
}
</code>
</pre>
<div class="bottom-bar">
<div class="bottom-bar-title">CSharp Resources</div>
<div class="bottom-bar-buttons">
<a class="bottom-bar-button" href="https://docs.neo.org/docs/n3/develop/write/basics.html" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
Documentation
</a>
<a class="bottom-bar-button" href="https://github.com/neo-project/examples/tree/master/csharp" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
Templates
</a>
<a class="bottom-bar-button" href="dev#tooling">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
Tools
</a>
</div>
</div>
</div>
<div class="code-window d-none" id="code-go">
<div class="top-bar">
<div class="top-bar-dots">
</div>
<div class="top-bar-title">
Go
</div>
</div>
<div class="top-bar-mobile">
<div class="top-bar-title-wrapper">
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GoDark.png" />
<div class="top-bar-title">
Go
</div>
</div>
<i class="iconfont close-icon">&#xe603;</i>
</div>
<pre class="green code">
<code>
package nep17Contract
var (
token nep17.Token
ctx storage.Context
)
// initializes the Token Interface and storage context
func init() {
token = nep17.Token{
...
Name: "Nep17 example",
Owner: util.FromAddress("NdHjSPVnw99RDMCoJdCnAcjkE23gvqUeg2"),
TotalSupply: 10000000000000000
}
ctx = storage.GetContext()
}
// Transfer token from one user to another
func (t Token) Transfer(ctx storage.Context, from, to interop.Hash160, amount int, data interface{}) bool {
amountFrom := t.CanTransfer(ctx, from, to, amount)
if amountFrom == -1 {
return false
}
if amountFrom == 0 {
storage.Delete(ctx, from)
}
if amountFrom > 0 {
diff := amountFrom - amount
storage.Put(ctx, from, diff)
}
amountTo := getIntFromDB(ctx, to)
totalAmountTo := amountTo + amount
storage.Put(ctx, to, totalAmountTo)
runtime.Notify("Transfer", from, to, amount)
if to != nil && management.GetContract(to) != nil {
contract.Call(to, "onNEP17Payment", contract.All, from, amount, data)
}
return true
}
</code>
</pre>
<div class="bottom-bar">
<div class="bottom-bar-title">Go Resources</div>
<div class="bottom-bar-buttons">
<a class="bottom-bar-button" href="https://github.com/nspcc-dev/neo-go/tree/master/examples" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
Documentation
</a>
<a class="bottom-bar-button" href="https://github.com/nspcc-dev/neo-go/tree/master/examples" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
Templates
</a>
<a class="bottom-bar-button" href="dev#tooling">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
Tools
</a>
</div>
</div>
</div>
<div class="code-window d-none" id="code-typescript">
<div class="top-bar">
<div class="top-bar-title">
Typescript
</div>
</div>
<div class="top-bar-mobile">
<div class="top-bar-title-wrapper">
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/TypescriptDark.png" />
<div class="top-bar-title">
Typescript
</div>
</div>
<i class="iconfont close-icon">&#xe603;</i>
</div>
<pre class="green code">
<code>
import { SmartContract} from '&#64;neo-one/smart-contract';
export class NEP17Contract extends SmartContract {
public readonly properties = {
name: 'NEO•ONE NEP17 Example',
groups: [],
trusts: '*',
permissions: [],
};
public readonly name = 'NEO•ONE NEP17 Example';
public readonly decimals = 8;
private readonly notifyTransfer = createEventNotifier&lt;Address | undefined, Address | undefined, Fixed&lt;8&gt;&gt;(
'Transfer', 'from', 'to', 'amount',
);
public transfer(from: Address, to: Address, amount: Fixed&lt;8&gt;, data?: any): boolean {
if (amount < 0) {throw new Error(&#96;Amount must be greater than 0: $&#123;amount&#125;&#96;);}
const fromBalance = this.balanceOf(from);
if (fromBalance < amount) { return false; }
const contract = Contract.for(to);
if (contract !== undefined && !Address.isCaller(to)) {
const smartContract = SmartContract.for&lt;TokenPayableContract&gt;(to);
if (!smartContract.approveReceiveTransfer(from, amount, this.address)) {
return false;
}
}
const toBalance = this.balanceOf(to);
this.balances.set(from, fromBalance - amount);
this.balances.set(to, toBalance + amount);
this.notifyTransfer(from, to, amount);
if (contract !== undefined) {
const smartContract = SmartContract.for&lt;TokenPayableContract&gt;(to);
smartContract.onNEP17Payable(from, amount, data);
}
return true;
}
}
</code>
</pre>
<div class="bottom-bar">
<div class="bottom-bar-title">Typescript Resources</div>
<div class="bottom-bar-buttons">
<a class="bottom-bar-button">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
Documentation
</a>
<a class="bottom-bar-button">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
Templates
</a>
<a class="bottom-bar-button" href="dev#tooling">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
Tools
</a>
</div>
</div>
</div>
<div class="code-window d-none" id="code-java">
<div class="top-bar">
<div class="top-bar-dots">
</div>
<div class="top-bar-title">
Java
</div>
</div>
<div class="top-bar-mobile">
<div class="top-bar-title-wrapper">
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/JavaDark.png" />
<div class="top-bar-title">
Java
</div>
</div>
<i class="iconfont close-icon">&#xe603;</i>
</div>
<pre class="green code">
<code>
package io.neow3j.examples.contractdevelopment.contracts;
import static io.neow3j.devpack.StringLiteralHelper.addressToScriptHash;
import io.neow3j.devpack.*
@ManifestExtra(key = "name", value = "FungibleToken")
@ManifestExtra(key = "author", value = "AxLabs")
@SupportedStandards("NEP-17")
@Permission(contract = "fffdc93764dbaddd97c48f252a53ea4643faa3fd") // ContractManagement
public class FungibleToken {
static final Hash160 owner = addressToScriptHash("NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBP");
@DisplayName("Transfer")
static Event3Args<Hash160, Hash160, Integer> onTransfer;
static final int initialSupply = 200_000_000;
static final int decimals = 8;
static final String assetPrefix = "asset";
static final String totalSupplyKey = "totalSupply";
static final StorageContext sc = Storage.getStorageContext();
static final StorageMap assetMap = sc.createMap(assetPrefix);
public static String symbol() {
return "FGT";
}
public static int decimals() {
return decimals;
}
public static int totalSupply() {
return getTotalSupply();
}
static int getTotalSupply() {
return Storage.getInteger(sc, totalSupplyKey);
}
public static boolean transfer(Hash160 from, Hash160 to, int amount, Object[] data)
throws Exception {
if (!Hash160.isValid(from) || !Hash160.isValid(to)) {
throw new Exception("From or To address is not a valid address.");
}
if (amount < 0) {
throw new Exception("The transfer amount was negative.");
}
if (!Runtime.checkWitness(from) && from != Runtime.getCallingScriptHash()) {
throw new Exception("Invalid sender signature. The sender of the tokens needs to be "
+ "the signing account.");
}
if (getBalance(from) < amount) {
return false;
}
if (from != to && amount != 0) {
deductFromBalance(from, amount);
addToBalance(to, amount);
}
onTransfer.fire(from, to, amount);
if (ContractManagement.getContract(to) != null) {
Contract.call(to, "onNEP17Payment", CallFlags.All, data);
}
return true;
}
public static int balanceOf(Hash160 account) throws Exception {
if (!Hash160.isValid(account)) {
throw new Exception("Argument is not a valid address.");
}
return getBalance(account);
}
@OnDeployment
public static void deploy(Object data, boolean update) throws Exception {
throwIfSignerIsNotOwner();
if (!update) {
if (Storage.get(sc, totalSupplyKey) != null) {
throw new Exception("Contract was already deployed.");
}
// Initialize supply
Storage.put(sc, totalSupplyKey, initialSupply);
// And allocate all tokens to the contract owner.
assetMap.put(owner.toByteArray(), initialSupply);
}
}
public static void update(ByteString script, String manifest) throws Exception {
throwIfSignerIsNotOwner();
if (script.length() == 0 && manifest.length() == 0) {
throw new Exception("The new contract script and manifest must not be empty.");
}
ContractManagement.update(script, manifest);
}
public static void destroy() throws Exception {
throwIfSignerIsNotOwner();
ContractManagement.destroy();
}
@OnVerification
public static boolean verify() throws Exception {
throwIfSignerIsNotOwner();
return true;
}
/**
* Gets the address of the contract owner.
*
* @return the address of the contract owner.
*/
public static Hash160 contractOwner() {
return owner;
}
private static void throwIfSignerIsNotOwner() throws Exception {
if (!Runtime.checkWitness(owner)) {
throw new Exception("The calling entity is not the owner of this contract.");
}
}
private static void addToBalance(Hash160 key, int value) {
assetMap.put(key.toByteArray(), getBalance(key) + value);
}
private static void deductFromBalance(Hash160 key, int value) {
int oldValue = getBalance(key);
if (oldValue == value) {
assetMap.delete(key.toByteArray());
} else {
assetMap.put(key.toByteArray(), oldValue - value);
}
}
private static int getBalance(Hash160 key) {
return assetMap.getInteger(key.toByteArray());
}
}
</code>
</pre>
<div class="bottom-bar">
<div class="bottom-bar-title">Java Resources</div>
<div class="bottom-bar-buttons">
<a class="bottom-bar-button" href="https://neow3j.io" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
Documentation
</a>
<a class="bottom-bar-button" href="https://github.com/neow3j/neow3j-examples-java/blob/master/src/main/java/io/neow3j/examples/contractdevelopment/contracts/" target="_blank">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
Templates
</a>
<a class="bottom-bar-button" href="dev#tooling">
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
Tools
</a>
</div>
</div>
</div>
<a class="btn-2 code-learn-more-mobile" href="/technology#smart-contracts">Learn More</a>
</div>
<div class="connection-line-row">
<div class="before-dual-tokens"></div>
</div>
<div class="dual-tokens-row">
<div class="col-left">
<div class="caption-square-container dual-tokens">
<div class="caption-square-inner-wrapper">
<div class="title"><em>Dual</em><br />Tokens</div>
<div class="subtitle">
Neo has a unique dual token model that separates governance from utility.
</div>
</div>
</div>
</div>
<div class="col-right header-imgs">
<div class="dual-tokens-container">
<div class="dual-tokens-wrapper">
<div class="token-wrapper">
<img class="token-image" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoTokenPolygon.svg" />
<span class="token-label">NEO token</span>
</div>
<div class="token-wrapper">
<img class="token-image" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GasTokenPolygon.svg" />
<span class="token-label">GAS token</span>
</div>
</div>
<img class="dot-wall" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/DotWall.svg" />
</div>
</div>
</div>
<div class="dual-tokens-row">
<div class="col-left">
<div class="dual-tokens-paragraph">
NEO token holders are the owners of the network and are able to participate in governance. NEO holders also receive passive distribution of the network utility token, GAS - No staking required. GAS rewards are increased for voting participation.
<br /><br /> GAS is used to pay for network fees, smart contract deployments, and in dApp purchases.
</div>
<div class="dual-tokens-horizLine"></div>
<div class="dual-tokens-buttons">
<a class="btn-2" href="/neogas#tokens">Learn More</a>
<a class="btn-4" href="/neogas#wallets">Find a Wallet</a>
</div>
</div>
<div class="col-right">
<div class="calculator">
<div class="calculator-header">
<div class="calculator-title">
NEO & GAS Calculator
</div>
</div>
<div class="calculator-body">
<div class="slider-row">
<div class="slider-before">
A user with
</div>
<input type="range" min="10" max="1000" value="500" class="slider" id="calculator-slider">
<div class="slider-after">
<img class="slider-neo-icon" src="https://neo-web.azureedge.net/images/transparent.png"
data-original="https://neo-web.azureedge.net/images/home/Neo-Symbol.svg" />
<div id="slider-current-value" class="ngc-slider-current-value">500</div>
</div>
</div>
<div class="middle-text">
would receive up to
</div>
<div class="results-row">
<div class="result-col result-col-neo">
<div class="result-num result-holding ngc-result-holding">0.44</div>
<div class="gas-wrapper">
<img class="result-icon" src="https://neo-web.azureedge.net/images/transparent.png"
data-original="https://neo-web.azureedge.net/images/home/Gas-Symbol.svg" />
<div class="legend">
Gas Per Month<span class="green">*</span>
</div>
</div>
<div class="status-text">For holding NEO</div>
</div>
<div class="plus-sign"><i class="iconfont">&#xe603;</i></div>
<div class="result-col result-col-gas">
<div class="result-num result-governance ngc-result-governance">17.52</div>
<div class="gas-wrapper">
<img class="result-icon" src="https://neo-web.azureedge.net/images/transparent.png"
data-original="https://neo-web.azureedge.net/images/home/Gas-Symbol.svg" />
<div class="legend">Gas Per Month<span class="green">*</span></div>
</div>
<div class="status-text">For Governance Participation</div>
</div>
</div>
<div class="foot-note">
<span class="green">*</span>estimate based on average 20% circulating NEO voting participation
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
$("#calculator-slider").on("input", function (e) {
const { value } = e.currentTarget
$(".ngc-slider-current-value").html(value)
const holdingGas = (+value * 10512000 * 0.1 / 100000000 / 12).toFixed(2)
const governanceGas = (+value * 10512000 * 0.8 / 20000000 / 12).toFixed(2)
$(".ngc-result-holding").html(holdingGas)
$(".ngc-result-governance").html(governanceGas)
})
})
</script>
</div>
</div>
<div class="connection-line-row">
<div class="before-governance"></div>
</div>
<div class="governance-section-pc">
<div class="col-left">
<div class="governance-img-container">
<img class="governance-img-horiz" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Governance.svg" />
</div>
<div class="governance-cards">
<span class="governance-learn-more">Learn More</span>
<div class="governance-card-container">
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
How to vote
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/vote.svg" />
</a>
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
General guide to governance
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
</a>
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Register as a committee candidate
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/register.svg" />
</a>
</div>
</div>
</div>
<div class="col-right">
<div class="caption-square-container governance">
<div class="caption-square-inner-wrapper">
<div class="title"><em>On-chain</em><br />Governance</div>
<div class="subtitle">
A dynamic on-chain council voted in by the NEO token holders.
</div>
</div>
</div>
<div class="governance-paragraph">
<span>
N3 introduces the ability for NEO holders to vote in council members and consensus nodes that maintain the liveliness of the Neo network and adjust critical blockchain parameters.
<br /><br />
<span class="governance-paragraph bold">
GAS rewards are distributed to both voters and committee members.
</span>
</span>
<div class="governance-green-horizline"></div>
</div>
</div>
</div>
<div class="governance-section-tablet">
<div class="governance-top-row">
<div class="governance-img-container">
<img class="governance-img-vert" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GovernanceTablet.svg" />
</div>
<div class="col-right">
<div class="caption-square-container governance">
<div class="caption-square-inner-wrapper">
<div class="title"><em>On-chain</em><br />Governance</div>
<div class="subtitle">
A dynamic on-chain council voted in by the NEO token holders.
</div>
</div>
</div>
<div class="governance-paragraph">
<span>
N3 introduces the ability for NEO holders to vote in council members and consensus nodes that maintain the liveliness of the Neo network and adjust critical blockchain parameters.
<br /><br />
<span class="governance-paragraph bold">
GAS rewards are distributed to both voters and committee members.
</span>
</span>
<div class="governance-green-horizline"></div>
</div>
</div>
</div>
<div class="governance-cards">
<span class="governance-learn-more">Learn More</span>
<div class="governance-card-container">
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
How to vote
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/vote.svg" />
</a>
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
General guide to governance
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
</a>
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Register as a committee candidate
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/register.svg" />
</a>
</div>
</div>
</div>
<div class="governance-section-mobile">
<div class="caption-square-container governance">
<div class="caption-square-inner-wrapper">
<div class="title"><em>On-chain</em><br />Governance</div>
<div class="subtitle">
A dynamic on-chain council voted in by the NEO token holders.
</div>
</div>
</div>
<div class="governance-img-container">
<img class="governance-img-vert" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GovernanceTablet.svg" />
</div>
<div class="governance-paragraph">
<span>
N3 introduces the ability for NEO holders to vote in council members and consensus nodes that maintain the liveliness of the Neo network and adjust critical blockchain parameters.
<br /><br />
<span class="governance-paragraph bold">
GAS rewards are distributed to both voters and committee members.
</span>
</span>
<div class="governance-green-horizline"></div>
</div>
<div class="governance-cards">
<span class="governance-learn-more">Learn More</span>
<div class="governance-card-container">
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
How to vote
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/vote.svg" />
</a>
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
General guide to governance
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
</a>
<a class="float-card" href="/gov">
<div class="card-text-wrapper">
<div class="green-vertline"></div>
<div class="card-text">
Register as a committee candidate
</div>
</div>
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/register.svg" />
</a>
</div>
</div>
</div>
<div class="connection-line-row">
<div class="before-contributors"></div>
</div>
<div class="contributors-row">
<div class="col-left">
<div class="caption-square-container contributors">
<div class="caption-square-inner-wrapper">
<div class="title"><em>Global</em><br />Contributors</div>
<div class="subtitle">
Neo is a joint effort by community groups from all over the world.
</div>
</div>
</div>
</div>
<div class="col-right">
<div class="github-container">
<div class="github-status d-none-zh">
<span class="github-status-num github-stars">3.4K</span>stars
</div>
<div class="github-status d-none">
<span class="github-status-num zh github-stars">3.4K</span>stars
</div>
<div class="github-status d-none-zh">
<span class="github-status-num github-forks">988</span>forks
</div>
<div class="github-status d-none">
<span class="github-status-num zh github-forks">988</span>forks
</div>
<div class="github-status d-none-zh">
<span class="github-status-num github-sub">388</span>subscribers
</div>
<div class="github-status d-none">
<span class="github-status-num zh github-sub">388</span>subscribers
</div>
<a href="https://github.com/neo-project" target="_blank" class="github-icon-wrapper"><img class="github-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/GitHub.png" /></a>
</div>
</div>
</div>
<div class="contributors-img-wrapper" id="scroll-wrapper">
<img class="contributors-img" usemap="#contributorsmap" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Contributors.svg">
<map name="contributorsmap">
<area shape="rect" coords="306 87 377 112" alt="NDG Enterprise GitHub" target="_blank" />
<area shape="rect" coords="306 119 377 142" alt="NDG Enterprise Website" target="_blank" />
<area shape="rect" coords="321 219 392 242" alt="NDG Tracker GitHub" href="https://github.com/neo-one-suite" target="_blank" />
<area shape="rect" coords="320 249 392 242" alt="NDG Tracker Website" href="https://neo-one.io" target="_blank" />
<area shape="rect" coords="402 303 473 325" alt="COZ GitHub" href="https://github.com/CityOfZion" target="_blank" />
<area shape="rect" coords="402 333 472 356" alt="COZ Website" href="https://coz.io" target="_blank" />
<area shape="rect" coords="715 174 787 196" alt="NEO Research GitHub" href="https://github.com/neoresearch" target="_blank" />
<area shape="rect" coords="715 203 787 226" alt="NEO Research Website" href="https://neoresearch.io" target="_blank" />
<area shape="rect" coords="805 304 876 326" alt="Red4Sec GitHub" href="https://github.com/red4sec" target="_blank" />
<area shape="rect" coords="805 335 876 356" alt="Red4Sec Website" href="https://red4sec.com/en" target="_blank" />
<area shape="rect" coords="932 221 1004 243" alt="AxLabs GitHub" href="https://github.com/AxLabs" target="_blank" />
<area shape="rect" coords="932 250 1004 273" alt="AxLabs Website" href="https://axlabs.com" target="_blank" />
<area shape="rect" coords="1053 316 1124 338" alt="NEO S.Petersburg Center GitHub" href="https://github.com/nspcc-dev/" target="_blank" />
<area shape="rect" coords="1053 340 1124 368" alt="NEO S.Petersburg Center Website" href="https://nspcc.ru/en/" target="_blank" />
<area shape="rect" coords="1390 291 1461 314" alt="NGD Shanghai GitHub" href="https://github.com/neo-project" target="_blank" />
<area shape="rect" coords="1390 321 1461 344" alt="NGD Shanghai Website" href="https://neo.org" target="_blank" />
<area shape="rect" coords="1479 205 1550 228" alt="NewEconoLab GitHub" href="https://github.com/NewEconoLab" target="_blank" />
<area shape="rect" coords="1479 235 1550 258" alt="NewEconoLab Website" href="https://nel.group/index-En.html" target="_blank" />
<area shape="rect" coords="1484 345 1554 366" alt="NEXT GitHub" href="https://github.com/NeoNEXT" target="_blank" />
<area shape="rect" coords="1484 335 1554 396" alt="NEXT Website" href="https://neonext.io" target="_blank" />
</map>
</div>
<div class="scroll-buttons">
<i class="iconfont disabled" id="scroll-left-btn">&#xe61c;</i>
<i class="iconfont" id="scroll-right-btn">&#xe61b;</i>
</div>
<div class="additional-wrapper">
<div class="additional-item">
<div class="additional-title">
Join the <span class="green">Community</span>
</div>
<div class="additional-icons">
<a href="https://www.facebook.com/NeoBlockchainOfficial" target="_blank"><i class="iconfont additional-icon">&#xe616;</i></a>
<a href="https://discord.gg/rvZFQ5382k" target="_blank"><i class="iconfont additional-icon">&#xe60b;</i></a>
<a href="https://neo3.azureedge.net/images/qrcode.jpg" target="_blank"><i class="iconfont additional-icon">&#xe60d;</i></a>
<a class="d-none-zh" href="https://t.me/NEO_EN" target="_blank"><i class="iconfont additional-icon">&#xe606;</i></a>
<a class="d-none" href="https://t.me/NEO_Chinese" target="_blank"><i class="iconfont additional-icon">&#xe606;</i></a>
<a href="https://weibo.com/neosmarteconomy" target="_blank"><i class="iconfont additional-icon">&#xe60e;</i></a>
<a href="https://twitter.com/NEO_Blockchain" target="_blank"><i class="iconfont additional-icon">&#xe607;</i></a>
<a href="https://www.reddit.com/r/NEO/" target="_blank"><i class="iconfont additional-icon">&#xe60a;</i></a>
<a href="https://medium.com/neo-smart-economy" target="_blank"><i class="iconfont additional-icon">&#xe608;</i></a>
</div>
</div>
<div class="additional-item">
<div class="additional-title">
Explore the <span class="green">Ecosystem</span>
</div>
<div class="additional-icons">
<a href="https://ndapp.org" target="_blank"><i class="iconfont additional-icon">&#xe611;</i></a>
</div>
</div>
<div class="additional-item">
<div class="additional-title">
Industry <span class="green">Partners</span>
</div>
<div class="additional-icons">
<a href="https://interwork.org" target="_blank"><i class="iconfont additional-icon">&#xe620;</i></a>
<a href="https://www.poly.network" target="_blank"><i class="iconfont additional-icon">&#xe62d;</i></a>
<a href="https://bsnbase.io/g/main/index" target="_blank"><i class="iconfont additional-icon">&#xe625;</i></a>
<a href="https://dotnetfoundation.org" target="_blank"><i class="iconfont additional-icon">&#xe628;</i></a>
<a href="https://www.ieee.org" target="_blank"><i class="iconfont additional-icon">&#xe62a;</i></a>
</div>
</div>
</div>
<div class="container">
<div class="row horiz-row latest-news-row">
<div class="latest-news-wrapper">
<div class="latest-news-title">
<span class="green">Latest</span> News
</div>
<div class="row list2">
<div class="col-md-4 group-0">
<div>
<a class="img" href="/blog/details/4317" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/upload/509c030f8aa44e3df62b.jpg"></a>
<div>
<div class="small">October 30, 2024<span> Blog</span></div>
<div class="list-title with-space"><h3><a href="/blog/details/4317">Neo X Grind Hackathon kicks off for EVM innovators with over $22 million in prizes and grants</a></h3></div>
<div class="list-summary with-space"><h4><a href="/blog/details/4317">Co-hosted with IOSG Kickstarter, Web3Labs, Foresight Ventures, and Bit…</a></h4></div>
<div class="small">
<a class="article-tag1 mr-1" href="/news?keywords=hackathon">#hackathon</a>
</div>
</div>
</div>
</div>
<div class="col-md-4 group-0">
<div>
<a class="img" href="/blog/details/4316" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/upload/82716d87a41860cd25ba.jpg"></a>
<div>
<div class="small">October 25, 2024<span> Blog</span></div>
<div class="list-title with-space"><h3><a href="/blog/details/4316">Neo Global Development General Monthly Report: July - September 2024</a></h3></div>
<div class="list-summary with-space"><h4><a href="/blog/details/4316">&#x1F680; Neo X: The start of a new chapter&#xD;&#xA;During the reporting period, we …</a></h4></div>
<div class="small">
<a class="article-tag1 mr-1" href="/news?keywords=Monthly Report">#Monthly Report</a>
</div>
</div>
</div>
</div>
<div class="col-md-4 group-0">
<div>
<a class="img" href="/blog/details/4315" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/upload/2254a3bb54d4626b61ef.jpg"></a>
<div>
<div class="small">August 2, 2024<span> Blog</span></div>
<div class="list-title with-space"><h3><a href="/blog/details/4315">Neo launches NeoPod ambassador program</a></h3></div>
<div class="list-summary with-space"><h4><a href="/blog/details/4315">Following the launch of the Neo X MainNet, we are excited to announce …</a></h4></div>
<div class="small">
<a class="article-tag1 mr-1" href="/news?keywords=Neo X">#Neo X</a>
</div>
</div>
</div>
</div>
</div>
<a class="btn-n3 dark-blue view-all-btn" href="/news">View All</a>
</div>
</div>
</div>
</div>
</div>
<footer class="py-5">
<div class="container-fluid">
<div class="container subscribe-container">
<h4 class="d-inline subscribe-title">Subscribe to our monthly newsletter.</h4>
<br />
<span class="subscribe-paragraph">Keep up to date on all the news, events and developments.</span>
<!-- Begin Mailchimp Signup Form -->
<form action="https://neo.us4.list-manage.com/subscribe/post?u=228d6f3157920dc1cad664104&amp;id=4f3883ac10" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate autocomplete="off">
<div id="mc_embed_signup_scroll">
<div class="mc-field-group form-inline">
<input type="email" class="form-control required email" value="" name="EMAIL" id="mce-EMAIL" placeholder="Enter Email Address">
<button class="form-control btn-2" type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe">Submit</button>
</div>
<div id="mce-responses" class="clear mt-2">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none">Thank you for subscribing!</div>
</div>
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_228d6f3157920dc1cad664104_4f3883ac10" tabindex="-1" value=""></div>
</div>
</form>
<script src="https://neo-web.azureedge.net/js/mc-validate.min.js?v=46D1392B815DE63F6EFCFC15028926C3FDBE28E15FDCDE784672996E14CC3128"></script>
<!--End mc_embed_signup-->
</div>
</div>
<div class="container">
<div class="row pt-4">
<div class="col-md-2">
<img class="my-3 img-fluid" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/logo files-dark.svg" style="width: 120px" />
</div>
<div class="col-md-2">
<h4 class="my-3">For Developers</h4>
<a href="/dev#tooling">Tooling</a>
<a href="/dev#examples">Examples & Tutorials</a>
<a target="_blank" href="https://docs.neo.org/">Documentation</a>
<a target="_blank" href="https://github.com/neo-project">GitHub</a>
<a href="/eco">Eco-Support</a>
</div>
<div class="col-md-2">
<h4 class="my-3">For token holders</h4>
<a href="/gov">Governance</a>
<a href="/neogas">NEO & GAS</a>
<a href="/neogas#wallets">Wallet</a>
<a href="/news?type=blog">Blogs</a>
<a href="/news?type=event">Events</a>
</div>
<div class="col-md-2">
<h4 class="my-3">Contact NGD</h4>
<a href="/joinus">Join US</a>
<a href="mailto:marketing@neo.org">Marketing</a>
<a href="mailto:eg@neo.org">EcoGrowth</a>
<a href="mailto:about@neo.org">General</a>
</div>
<div class="col-md-2">
<h4 class="my-3">For Media</h4>
<a href="/about">About Neo</a>
<a href="/presskit">Press Kit</a>
</div>
<div class="col-md-2">
<h4 class="my-3">Keep in touch</h4>
<a class="d-inline" target="_blank" href="https://www.facebook.com/NeoBlockchainOfficial"><i class="iconfont">&#xe616;</i></a>
<a class="d-inline" target="_blank" href="https://weibo.com/neosmarteconomy"><i class="iconfont">&#xe60e;</i></a>
<a class="d-inline" target="_blank" href="https://twitter.com/neo_blockchain"><i class="iconfont">&#xe607;</i></a>
<a class="d-inline" target="_blank" href="https://discord.gg/rvZFQ5382k"><i class="iconfont">&#xe60b;</i></a>
<a class="d-inline" href="javascript:" onclick="$('.wechat2').toggle('fast')"><i class="iconfont">&#xe60d;</i></a>
<a class="wechat2" href="https://neo-web.azureedge.net/images/qrcode.jpg" target="_blank"><img src="https://neo-web.azureedge.net/images/qrcode.jpg" /></a>
<a class="d-inline" target="_blank" href="https://t.me/NEO_EN"><i class="iconfont">&#xe606;</i></a>
<a class="d-inline" target="_blank" href="https://www.reddit.com/r/NEO/"><i class="iconfont">&#xe60a;</i></a>
<a class="d-inline" target="_blank" href="https://neo-blockchain.medium.com/"><i class="iconfont">&#xe608;</i></a>
</div>
</div>
<div class="mt-3 copyright-container">
<p class="op-70 copyright-paragraph">Copyright © Neo Team 2014-2025 <a class="d-none" href="/map"><small>Site map</small></a></p>
</div>
</div>
</footer>
<form class="d-none" id="form_language" method="post" action="/home/setlanguage">
<p><input type="hidden" id="culture" name="culture" /><input type="hidden" id="returnUrl" name="returnUrl" /></p>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8CzPQnOMQ9dKtMuc0rPdUJH2Uya_5-o-TcLXRabNDgPzXgwgh-sneB1z-mUeB5dq1ckDD7nu0exCfbl8Tqq-7IOwRMl1-DJS8a7MfXkHzLrDnS9SPa-wfOO_w6pfR5X-o5OihyCQ9MWEIpn_4SfkLVU" /></form>
<script src="https://neo-web.azureedge.net/lib/jquery/jquery.min.js?v=7AA6B0E08F48A0F95D8DF7EA89E4CBFE1EF3D1E8C0F7373F7F25EDFB4E4A325E"></script>
<script src="https://neo-web.azureedge.net/lib/popper.js/popper.min.js?v=FE3D4915823289BE1B6AE1DD3B07125518DC75627F9033C8E9F16C98BD80032B"></script>
<script src="https://neo-web.azureedge.net/lib/bootstrap/js/bootstrap.min.js?v=A4555D8DEE9F8ADC976E84A97DFE87E6BF5794B579F49BB56F133FED85F7D709"></script>
<script src="https://neo-web.azureedge.net/js/jquery.lazyload.min.js?v=47D12549F27B0331F4CC9F378FF3AF1D07F16F706D1155E5913BFDD830445151"></script>
<script src="https://neo-web.azureedge.net/js/jquery.throttle.min.js?v=24C80F4C12E34B7AD24EDEEDAC2DD82CE7F832DC06F9AE25E9D5B13BB1EF9017"></script>
<script src="https://neo-web.azureedge.net/js/text-autospace.js?v=BA0E1B981627A9622F2765E836A35FB88EF89F5986893C520E138775ADCC8E13"></script>
<script src="https://neo-web.azureedge.net/js/site.min.js?v=3CAAB36C885FBBA7FE49BB6CE4F890C7B71EDFC2ED1CC2FBBA5D69C113BEFEBC"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130525731-3"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-130525731-3');
</script>
<script>
$('body').css('padding-top', $('.navbar').outerHeight() + 'px')
// detect scroll top or down
if ($('.smart-scroll').length > 0) { // check if element exists
var last_scroll_top = 0;
var scroll_active_top = 150;
$(window).on('scroll', function (e) {
if ($(this).hasClass("show")) {
return e.preventDefault()
}
scroll_top = $(this).scrollTop();
if (scroll_top <= 0 || scroll_top < scroll_active_top) {
$('.smart-scroll').removeClass('scrolled-up').removeClass('scrolled-down');
}
else if (scroll_top < last_scroll_top) {
$('.smart-scroll').removeClass('scrolled-down').addClass('scrolled-up');
}
else {
$('.smart-scroll').removeClass('scrolled-up').addClass('scrolled-down');
}
last_scroll_top = scroll_top;
});
}
//if ("en" == "zh") {
// $("a").each(function () {
// if ($(this).attr("href") && $(this).attr("href").startsWith("https://docs.neo.org")) {
// $(this).attr("href", $(this).attr("href").replace("en-us", "zh-cn"));
// }
// });
//}
</script>
<script src="https://neo-web.azureedge.net/lib/image-map-resizer/js/imageMapResizer.js"></script>
<script>
$(document).ready(function () {
$('map').imageMapResize();
try {
$.get("home/githubstatus", function (data) {
if (!data) return;
const starsCount = +(data.stargazers_count);
const stars = starsCount > 1000 ? `${(starsCount / 1000).toFixed(1)}K` : `${starsCount}`;
$(".github-stars").html(stars);
const forksCount = +(data.forks_count);
const forks = forksCount > 1000 ? `${(forksCount / 1000).toFixed(1)}K` : `${forksCount}`;
$(".github-forks").html(forks);
const subCount = +(data.subscribers_count);
const sub = subCount > 1000 ? `${(subCount / 1000).toFixed(1)}K` : `${subCount}`
$(".github-sub").html(sub);
});
} catch {
console.log('Failed to get GitHub status.')
}
});
$(".language-icon").on("click", function () {
$(".language-icon.selected").removeClass("selected")
const $el = $(this)
$el.addClass("selected")
const lang = $el.data("lang")
$(".code-window").addClass("d-none")
$("#code-" + lang).removeClass("d-none")
$('html').attr('data-code-window-open', lang)
})
const scrollDistance = 300;
function debounce(func, wait, immediate) {
var timeout;
return function () {
var context = this, args = arguments;
var later = function () {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
$("#scroll-wrapper").on("scroll", debounce(function (e) {
const scrollWrapper = $("#scroll-wrapper")
console.log(scrollWrapper.scrollLeft(), scrollWrapper.innerWidth());
if (scrollWrapper.scrollLeft() > 0) {
$("#scroll-left-btn").removeClass("disabled")
} else {
$("#scroll-left-btn").addClass("disabled")
}
if (scrollWrapper.scrollLeft() + 8 < scrollWrapper.width()) {
$("#scroll-right-btn").removeClass("disabled")
} else {
$("#scroll-right-btn").addClass("disabled")
}
}, 50))
$("#scroll-left-btn").click(function (e) {
if ($(this).hasClass("disabled")) {
e.preventDefault();
return;
}
$("#scroll-wrapper").animate({
scrollLeft: "-=" + scrollDistance
}, 650)
})
$("#scroll-right-btn").click(function (e) {
if ($(this).hasClass("disabled")) {
e.preventDefault();
return;
}
$("#scroll-wrapper").animate({
scrollLeft: "+=" + scrollDistance
}, 650)
})
$(".close-icon").on("click", function () {
$(".language-icon.selected").removeClass("selected");
$(".code-window").addClass("d-none")
$('html').removeAttr('data-code-window-open')
})
</script>
<script>
var scroll_active_top = 650;
</script>
</body>
</html>