> For the complete documentation index, see [llms.txt](https://docs.midpointapi.com/midpoint-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.midpointapi.com/midpoint-documentation/more-reading/startpoints.md).

# Startpoints

A startpoint is the on-chain interface for your contract to call your midpoint. All calls to a midpoint begin with a call to `callMidpoint()` at the startpoint contract for a given chain.

<table><thead><tr><th width="188">Midpoint Chain ID</th><th width="269">Chain</th><th>Startpoint Address</th></tr></thead><tbody><tr><td>1</td><td>Ethereum</td><td>0x8343b2CBE03748f8170b977BD8e1e85098D81B05</td></tr><tr><td>5</td><td>Goerli Testnet</td><td>0x9BEa2A4C2d84334287D60D6c36Ab45CB453821eB</td></tr><tr><td>10</td><td>Optimism</td><td>0x0cabEDbDB07C2AFc7D840cF34A2A7CC46DA446BD</td></tr><tr><td>137</td><td>Polygon</td><td>0x80Ab1b74Fc8E57aE586854A876692D9088e78483</td></tr><tr><td>420</td><td>Optimism Goerli Testnet</td><td>0xa89c2f3A20cED98cd39AFd0Ab5B207C46Fb2Cdf3</td></tr><tr><td>3141</td><td>Filecoin Hyperspace Testnet</td><td>0x0705c34AA032354A7966776098E0c12cc5539Bc8</td></tr><tr><td>42161</td><td>Arbitrum One</td><td>0x0cabEDbDB07C2AFc7D840cF34A2A7CC46DA446BD</td></tr><tr><td>80001</td><td>Polygon Mumbai Testnet</td><td>0x47a4905D4C2Eabd58abBDFEcBaeB07F1A29b660c</td></tr><tr><td>421613</td><td>Arbitrum Goerli Testnet</td><td>0x1063051eFe824703E1cf36206A8FA361545E9b54</td></tr></tbody></table>

```solidity
event callOracleEvent(uint64 _midpointId, uint256 _requestId, address _contract);
event callOracleEventData(uint64 _midpointId, bytes _data, uint256 _requestId, address _contract);

uint256 private rollingRequestId;

constructor() {
    rollingRequestId = 0;
}

function callMidpoint(uint64 _id) public returns (uint256 requestId) {
    rollingRequestId = rollingRequestId + 1;
    emit callOracleEvent(_id, rollingRequestId, msg.sender);
    return rollingRequestId;
}

function callMidpoint(uint64 _id, bytes calldata _data) public returns (uint256 requestId) {
    rollingRequestId = rollingRequestId + 1;
    emit callOracleEventData(_id, _data, rollingRequestId, msg.sender);
    return rollingRequestId;
}
```
