Обычно есть контракт для монет и отдельно контракт для ICO, в контракте есть функция наподобие
function () payable {
buyTokens(msg.sender);
}
которая вызывается, когда на контракт ICO приходят деньги, и вот тут уже все зависит от реализации функции buyTokens она может выпускать токены, либо перемещать с одного аккаунта на другой.