You can use XRC20Token code to create your own XRC20 token on xray. For this example, we will use xray testnet, first getting some testnet xray.
After installing the xray Core wallet from https://xrayeco.io/wallet or https://github.com/xrayproject/xray/releases, get the wallet receiving address by selecting Window - Receiving addresses, select and copy the wallet receiving address qXGdYmLypZRy8pTpj9EdTBHkqtv6cv99ky.

We need some xray to pay for the smart contract gas and transaction fees and can get some testnet xray from the xray Testnet Faucet. Paste the receiving address into the faucet address field and press the blue checkmark button.

Next, copy the token code at XRC20Token. In the XRC20Token.sol file you can change name
, symbol
, and totalSupply
to your preference. For this example, we will edit later to name the token "QRC TEST 527", the symbol "QT527" and have a total supply of 1,000,000,000 which is entered as "10 9". We will leave decimals
set for 8, to give 8 decimal places for each token, so for example, you should send a 1.12345678 token amount.

After editing the Solidity file, save it locally or just copy to paste into Remix.
Next, we will use Remix to compile the Solidity code into bytecode. In a browser, go to Remix at http://remix.ethereum.org/ and select the SOLIDITY Environment.

Click the "+" button to create a new file.

Enter the file name "XRC20Token.sol" and "OK" to create a new file.

Paste in the source code from the XRC20Token.sol file.

Here you can see the code has been edited to name the token "QRC TEST 527", with the symbol "QT527", and a supply of 1 billion.
Also, create a new file, enter the file name "SafeMath.sol" and paste in the code for SafeMath.sol.
Select the compiler button on the left side.

The compiler tab is shown below. You can leave the Solidity version set for 0.4.26. At the top, click the tab for XRC20Token.sol to select that file to compile, and click the blue Compile XRC20Token.sol button to compile the source code into bytecode.

Ignore the warnings.
Click on the Bytecode button to copy the bytecode.

Paste the copied bytecode into a text editor, and select just the numeric characters for the object code (shown here highlighted in blue). The object code starts with "60806" and ends with "00029" (not shown in this image).

On the wallet, go to Smart Contracts - Create and paste the copied object code into the "Bytecode" field.

At the bottom of the Create Contract form, click the drop-down on "Sender Address" and select qXGdYmLypZRy8pTpj9EdTBHkqtv6cv99ky. This sets the address to be used by the contract. Leave the gas set at 25000000 and price set at 0.0000040 unless you know how to safely change these. Click the Create Contract button and Yes to send the transaction.

The wallet will confirm the transaction on the "Result 1" tab. Copy the Contract Address 137d046beb3cb66c0cdd389bf8bab4faeae16c0b.

The wallet Transactions page will show the transactions so far. First, the wallet received 90.0 xray sent from the Testnet faucet. Next, the contract create transaction sent the contract bytecode and fees of 1.01414 xray. Finally, the wallet received a gas refund of 0.623456 xray. Gas refunds are sent in the coinstake transaction, so they are show as "mined" in the wallet and must mature for 500 blocks before they can be used.

You can also see the contract create transaction on testnet.xray.info

The transaction was sent with 2,500,000 gas at price of 0.00000040 xray. The contract creation used 941,360 gas giving a gas refund of 2,500,000 - 941,360 = 1,558,640 at price of 0.00000040 or 0.623456 xray for the refund.