title: how raw_call actually works in vyper
body: <p>I am new to Vyper. I was analyzing the contract there I saw raw_call in a method</p>
  <p><code>raw_call(reward_contract, self.claim_sig)  </code></p>
  <p>its permalink:
  <a href="https://github.com/curvefi/curve-dao-contracts/blob/3bee979b7b6293c9e7654ee7dfbf5cc9ff40ca58/contracts/gauges/RewardsOnlyGauge.vy#L113" rel="nofollow noreferrer">https://github.com/curvefi/curve-dao-contracts/blob/3bee979b7b6293c9e7654ee7dfbf5cc9ff40ca58/contracts/gauges/RewardsOnlyGauge.vy#L113</a></p>
  <p>and claim_sig Four-byte selectors for staking, withdrawing, and claiming,
  left padded with zero bytes. If the reward contract can
  be claimed from but does not require staking, the staking
  and withdraw selectors should be set to 0x00</p>
  <p>its permalink: <a href="https://github.com/curvefi/curve-dao-contracts/blob/3bee979b7b6293c9e7654ee7dfbf5cc9ff40ca58/contracts/gauges/RewardsOnlyGauge.vy#L427-L430" rel="nofollow noreferrer">https://github.com/curvefi/curve-dao-contracts/blob/3bee979b7b6293c9e7654ee7dfbf5cc9ff40ca58/contracts/gauges/RewardsOnlyGauge.vy#L427-L430</a></p>
  <p><strong>more about sigs</strong>:
  A concatenation of three four-byte function signatures: stake, withdraw, and getReward. The signatures are then right padded with empty bytes. See the example below for more information on how to prepare this data.</p>
  <p><strong>An example of generating the signatures input and enabling a vanilla SNX rewards contract:</strong></p>
  <p>Rewards = Contract(&quot;0x99ac10631f69c753ddb595d074422a0922d9056b&quot;)</p>
  <p>first, we get the signatures for depositing, withdrawing and claiming
  sigs = [rewards.stake.signature, rewards.withdraw.signature, rewards.getReward.signature]
  sigs
  [&quot;0xa694fc3a&quot;, &quot;0x2e1a7d4d&quot;, &quot;0x3d18b912&quot;]</p>
  <p>now we remove the leading 0x and concatentate them
  sigs = &quot;&quot;.join(i[2:] for i in sigs)
  sigs
  &quot;a694fc3a2e1a7d4d3d18b912&quot;</p>
  <p>finally, we add the leading 0x and trailing 00 bytes
  sigs = &quot;0x&quot; + sigs + (&quot;00&quot; * 20)
  sigs
  &quot;0xa694fc3a2e1a7d4d3d18b9120000000000000000000000000000000000000000&quot;</p>
  <p>now we are ready to set the rewards contract
  gauge.set_rewards(rewards, sigs, [reward_token] + [ZERO_ADDRESS] * 7, {'from': alice})</p>
  <p><strong>and the question is</strong>:</p>
  <p><code>as it says there are three signatures... does raw_call calls every function? and how is it passing their parameters?</code></p>