Integrações

Após criar e configurar uma campanha e garantir que ela tenha estoque suficiente para fornecer recompensas, o próximo passo é conectar a campanha a um gatilho de recompensas. Esse gatilho pode ser uma Scene, uma Quest ou um servidor externo. Esta seção explica como diferentes integrações com Rewards podem ser feitas.

Conceder recompensas a partir de uma scene

As Rewards podem ser integradas diretamente em scenes do Decentraland, mas essa abordagem traz alguns riscos. Como a lógica fica embutida no código da scene que os usuários podem acessar, não é recomendada para cunhar itens com raridade inferior a [EPIC](Ver documentação#rarity).

Tenha em mente que usuários determinados com conhecimento técnico suficiente podem potencialmente contornar medidas de segurança como captchas, alterar seus endereços IP e cunhar todos os itens disponíveis, que eles poderiam então vender no Marketplace. A salvaguarda principal contra isso é garantir um fornecimento suficiente de itens, para que todos tenham uma chance justa de receber uma recompensa.

Flags de dispenser recomendadas

As seguintes configurações de dispenser são recomendadas para reduzir o risco de exploits nesse cenário:

Exemplo

import { getPlayer } from '@dcl/sdk/src/players'
import { signedFetch } from '@decentraland/SignedFetch'
import { getRealm } from '~system/Runtime'

export function main() {
  // 1. Obter desafio de captcha para mostrar ao usuário
  const request = await fetch(`https://rewards.decentraland.org/api/captcha`, {
    method: 'POST',
  })
  const captcha = await request.json()

  // 2. Exibir captcha para o jogador completar - Veja exemplo em studios.decentraland.org/resources

  // 3. Obter dados do usuário
  const user = getPlayer()

  // 4. Obter realm atual
  const realmInfo = await getRealm({})

  // 5. Enviar requisição para atribuir um wearable/emote
  const assignRequest = await signedFetch('https://rewards.decentraland.org/api/rewards', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      campaign_key: '[DISPENSER_KEY]', // chave do dispenser
      beneficiary: user.userId, // ethereum address
      catalyst: realmInfo.baseUrl, // catalyst domain
      captcha_id: captcha.data.id, // "9e6b2d07-b47b-4204-ae87-9c4dea48f9b7"
      captcha_value: '[CAPTCHA_VALUE]', // "123456"
    }),
  })

  const reward = await assignRequest.json()

Conceder recompensas a partir de um Decentraland Quests

Você pode integrar Rewards facilmente com o Decentraland Questsarrow-up-right, isso é ideal se você quiser recompensar usuários por completar uma quest.

Flags de dispenser recomendadas

As seguintes configurações de dispenser são recomendadas para reduzir o risco de exploits nesse cenário:

  • [Limit Assignments](Ver documentação#limit-assignments) (se isso se aplicar ao seu caso de uso)

Qualquer outra das outras flags fará sua integração falhar, evite usá-las.

circle-exclamation

Exemplo

Para integrar sua Quest com o serviço Rewards, você só precisa de uma chave do dispenser e de configurar um webhookarrow-up-right para conceder recompensas.

Conceder recompensas a partir de um servidor personalizado

Você pode integrar Rewards diretamente a partir do seu servidor, o que é ideal para executar verificações extras antes de cunhar itens. Uma vantagem adicional é que, ao contrário do código da scene, o código do seu servidor pode não ser público, tornando mais difícil para usuários descobrirem e explorarem vulnerabilidades.

Flags de dispenser recomendadas

As seguintes configurações de dispenser são recomendadas para reduzir o risco de exploits nesse cenário:

  • [Limit Assignments](Ver documentação#limit-assignments) (se isso se aplicar ao seu caso de uso)

Habilitar qualquer uma das outras flags poderia complicar sua integração ou, dependendo do seu caso de uso, potencialmente causar sua falha. Portanto, não é recomendado usá-las, a menos que haja uma necessidade específica. No entanto, você pode querer explorar seus potenciais benefícios.

circle-exclamation

Exemplo

Atualizado