---
title: VERI token contract 0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374
description: VERI is an ERC-20 token at 0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374 on Ethereum mainnet, deployed on 23 Apr 2017 with a fixed supply of 100,000,000 and no proxy, so the code that runs today is the code deployed then.
url: https://veri.how/veri/contract
area: veri
kind: reference
updated: 2026-10-15T00:00:00Z
author: Patryk Dwórznik
license: CC BY 4.0
contracts:
  - id: eip155:1:0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374
    name: Veritaseum
    verified:
      date: 2026-10-13
sources:
  - title: VERI verified source, Etherscan
    url: https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374#code
  - title: VERI contract creation transaction, Etherscan
    url: https://etherscan.io/tx/0xfda7aad54c81d9bc8e7a67e68821a24009c2bcd5e9b9a47b71f40d5a45f3a6fc
  - title: VERI contract, Blockscout
    url: https://eth.blockscout.com/address/0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374?tab=contract
---

# VERI token contract 0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374

VERI is an ERC-20 token at 0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374 on Ethereum mainnet, deployed on 23 Apr 2017 with a fixed supply of 100,000,000 and no proxy, so the code that runs today is the code deployed then.

## Facts

| Fact | Value |
| --- | --- |
| Address | [0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374](https://etherscan.io/token/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374) |
| Chain | [Ethereum (eip155:1)](https://etherscan.io) |
| Standard | [ERC-20](https://eips.ethereum.org/EIPS/eip-20) |
| Symbol | [VERI](https://etherscan.io/token/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374) |
| Decimals | [18](https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374#code) |
| Deployed | [Block 3,586,472 · 23 Apr 2017](https://etherscan.io/tx/0xfda7aad54c81d9bc8e7a67e68821a24009c2bcd5e9b9a47b71f40d5a45f3a6fc) |
| Owner | [0x82c48875C17EE5812f909a9d75C0F64f7A8719FE](https://etherscan.io/address/0x82c48875c17ee5812f909a9d75c0f64f7a8719fe) |
| Source | [Verified on Etherscan](https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374#code) |
| Transactions | [All transactions](https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374) |
| ABI | [veri.json](https://veri.how/abi/veri.json) |
| Last verified | 13 Oct 2026 |

The on-chain name of the token is `Veritaseum` and its symbol is `VERI`. The Fact sheet above comes from the contract's verified source and its deployment transaction; the sections below say where each value comes from and how to read it yourself.

## Deployment

The contract was created in block [3,586,472](https://etherscan.io/block/3586472) on 23 Apr 2017 at 12:45:03 UTC by transaction [`0xfda7aad5…3a6fc`](https://etherscan.io/tx/0xfda7aad54c81d9bc8e7a67e68821a24009c2bcd5e9b9a47b71f40d5a45f3a6fc). The sender, 0x44CAb6F6DC7045FD4AcD1d0f3d09Fc7a83004bd3, is an externally owned account. The constructor takes no arguments: it gives the whole supply to the sender and emits no event (the [transaction](https://etherscan.io/tx/0xfda7aad54c81d9bc8e7a67e68821a24009c2bcd5e9b9a47b71f40d5a45f3a6fc) has no logs).

## Verified source

The source is one Solidity file of about 150 lines, `pragma solidity ^0.4.8`, compiled with v0.4.8+commit.60cc1668 and the optimizer on at 200 runs. Etherscan reports an [exact match](https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374#code) and Blockscout shows it as [verified](https://eth.blockscout.com/address/0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374?tab=contract). It declares five contracts and no libraries:

| Contract          | What it holds                                                                                                             |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `Ownable`         | `address public owner`, the `onlyOwner` modifier and `transferOwnership`                                                  |
| `SafeMath`        | `safeAdd`, `safeSub`, `safeMul`, `safeDiv`, `max64`, `min64`, `max256`, `min256` and a custom `assert` that calls `throw` |
| `ERC20`           | the abstract interface: `totalSupply`, the five functions and the `Transfer` and `Approval` events                        |
| `StandardToken`   | the `balances` and `allowed` mappings and the five ERC-20 functions                                                       |
| `VeritaseumToken` | `name`, `symbol`, `decimals`, `totalSupply`, the constructor and an overriding `transferOwnership`                        |

The constants, as written in `VeritaseumToken`:

```solidity
string public name = "Veritaseum";
string public symbol = "VERI";
uint public decimals = 18;
uint public totalSupply = 100000000 ether;
```

`decimals` is declared as `uint`, so `decimals()` returns a `uint256` rather than the `uint8` later tokens use. The value is 18 either way. See [How VERI differs from a modern ERC-20](https://veri.how/veri/erc20-quirks.md) for the other places where this 2017 code departs from today's conventions.

## Not upgradeable

There is no proxy in front of the contract and no `delegatecall` in it ([Blockscout](https://eth.blockscout.com/address/0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374?tab=contract) lists no proxy type or implementation). The bytecode deployed on 23 Apr 2017 is the bytecode that runs today, and nothing in it can be changed.

## Functions and events

The ABI, served at [/abi/veri.json](https://veri.how/abi/veri.json), has these entries and nothing else:

| Function                                                                                         | Selector                                               | Who can call it       |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------ | --------------------- |
| `name()`, `symbol()`, `decimals()`, `totalSupply()`                                              | `0x06fdde03`, `0x95d89b41`, `0x313ce567`, `0x18160ddd` | anyone, read-only     |
| `balanceOf(address)`, `allowance(address,address)`                                               | `0x70a08231`, `0xdd62ed3e`                             | anyone, read-only     |
| `owner()`                                                                                        | `0x8da5cb5b`                                           | anyone, read-only     |
| `transfer(address,uint256)`, `transferFrom(address,address,uint256)`, `approve(address,uint256)` | `0xa9059cbb`, `0x23b872dd`, `0x095ea7b3`               | any holder or spender |
| `transferOwnership(address)`                                                                     | `0xf2fde38b`                                           | the owner only        |

The events are `Transfer(address,address,uint256)` and `Approval(address,address,uint256)`. There is no mint, burn, pause, freeze or blacklist function, and no event for a change of owner. The owner's one privilege, `transferOwnership`, is described in [How VERI differs from a modern ERC-20](https://veri.how/veri/erc20-quirks.md#transferownership-moves-the-owners-whole-balance).

## Owner

`owner()` returns 0x82c48875C17EE5812f909a9d75C0F64f7A8719FE, an externally owned account, and has since block [3,589,599](https://etherscan.io/block/3589599) on 24 Apr 2017, when the deployer called `transferOwnership` ([transaction](https://etherscan.io/tx/0x5d7d007e7dbf534a2983880be117100691cf351fdc45d6adb2249c6fd3a8d4b1)).

## Check it yourself

Each command is an [`eth_call`](https://ethereum.org/developers/docs/apis/json-rpc/#eth-call) to a public Ethereum JSON-RPC endpoint; swap in `https://eth.drpc.org` if the first one is busy. The result is a 32-byte word (for strings, an ABI-encoded string). The [JSON-RPC API](https://ethereum.org/developers/docs/apis/json-rpc/) reference describes the request format and the other methods.

```sh
# name(): the result ends in "Veritaseum" in hex (5665726974617365756d)
curl -s https://ethereum-rpc.publicnode.com -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374","data":"0x06fdde03"},"latest"]}'

# symbol(): the result ends in "VERI" in hex (56455249)
curl -s https://ethereum-rpc.publicnode.com -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374","data":"0x95d89b41"},"latest"]}'

# decimals(): 0x…12, which is 18
curl -s https://ethereum-rpc.publicnode.com -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374","data":"0x313ce567"},"latest"]}'

# owner(): 0x…82c48875c17ee5812f909a9d75c0f64f7a8719fe
curl -s https://ethereum-rpc.publicnode.com -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374","data":"0x8da5cb5b"},"latest"]}'
```

With [Foundry](https://www.getfoundry.sh/introduction/installation) installed, its `cast` command runs the same calls and decodes the answers:

```sh
export ETH_RPC_URL=https://ethereum-rpc.publicnode.com

# "Veritaseum", "VERI", 18, 0x82c48875C17EE5812f909a9d75C0F64f7A8719FE
cast call 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374 'name()(string)'
cast call 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374 'symbol()(string)'
cast call 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374 'decimals()(uint256)'
cast call 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374 'owner()(address)'
```

To confirm the source matches the bytecode, open the [verified code on Etherscan](https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374#code) and compare it with [`eth_getCode`](https://ethereum.org/developers/docs/apis/json-rpc/#eth-getcode) on either endpoint, or `cast code 0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374`. The [data files](https://veri.how/data.md) page lists the ABI and the other files the site serves.

## Sources

1. [VERI verified source, Etherscan](https://etherscan.io/address/0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374#code)
2. [VERI contract creation transaction, Etherscan](https://etherscan.io/tx/0xfda7aad54c81d9bc8e7a67e68821a24009c2bcd5e9b9a47b71f40d5a45f3a6fc)
3. [VERI contract, Blockscout](https://eth.blockscout.com/address/0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374?tab=contract)

## Related

- [VERI supply is fixed at 100,000,000](https://veri.how/veri/supply.md): The VERI contract sets totalSupply to 100,000,000 tokens (10^26 base units at 18 decimals) once, when it is deployed, and has no mint, burn or pause function, so the supply cannot change.
- [How VERI differs from a modern ERC-20](https://veri.how/veri/erc20-quirks.md): VERI is 2017 code whose initial allocation and ownership transfer emit no Transfer event, whose decimals() returns uint256, whose failed transfers throw instead of returning false, which has no zero-address checks, and whose transferOwnership moves the owner's whole balance to the new owner, as its one call on 24 Apr 2017 did with all 100,000,000 VERI.
- [Check a VERI balance](https://veri.how/veri/check-balance.md): Call balanceOf(address) on the VERI contract through a public Ethereum JSON-RPC endpoint with curl and divide the result by 10^18; read the balance rather than summing Transfer logs, which miss two balance changes.
